Страница 1 из 1

Несколько проблемок с Excel

Добавлено: 11 Март 2015, 8:58
Андрей
Накопилось несколько проблемок с Excel. Надеюсь разрешить их с помощью сообщества.

1. Надо выделить диапазон (несколько) столбцов по их числовому, а не буквенному обозначению. Подыскал подходящий оператор, опробовал через макрос в Экселе - работает ! Вот он - Range(Columns(7), Columns(10)).Select
Переписываю в клашу - l:ole{'Range(Columns(7), Columns(10)).Select'} или еще так -l:ole{'ActiveSheet.Range(Columns(7), Columns(10)).Select'}
- не работает ! ???

2. Вот такой стандартный код
L:FileName = path()&'\Отчеты\Отчет по услуге.xls'
copy('.\Forms\ОтчетПоУслуге.xls',L:FileName)
l:OLE{'workbooks.open("' & clip(l:FileName) & '")'}

При открытии Эксел выдает сообщение "BIND has not been called for "f:\Work\Отчеты\Отчет по услуге.xls"
Закрываешь его, дальше все нормально отрабатывает.... ???

3. Все же складывается впечатление, что существуют такие связки Clarion+Windows+Excel, которые не работают
Например, было у меня
9.1.11497+Win 7 64+Excel 2013 - работало
Теперь стало 9.1.11497+Win 7 64+Excel 2010 - не работает - открывается пустая книга
На эмуляторе 9.1.11497+WinXP+Excel 2007 - работает

Прошу у кого такую связку можно проверить - 9.1.11497+Win 7 64+Excel 2010 - работает ли ?

Несколько проблемок с Excel

Добавлено: 11 Март 2015, 10:26
kreator
Есть некие условности работы Clarion c ole Excel, на форуме периодически это обсуждается. Надо начать прежде всего с создания ole. Вот так работает в последних версиях (именно в той конфигурации как у Вас):

Код: Выделить всё

LOC:OLE = create(0, CREATE:ole)
LOC:OLE{prop:Create} = 'EXCEL.Application'

По первому вопросу решения не нашёл, задавал похожий вопрос - http://forum.clarionlife.net/phpbb/view ... f=1&t=3331.
По второму. У меня проблем нет. Может неправильное объявление ole. А ещё вероятнее, что файл xls не родной для последних Excel, при открытии может спрашивать чего-то.

Несколько проблемок с Excel

Добавлено: 11 Март 2015, 10:31
Игорь Столяров
Андрей писал(а): 2. Вот такой стандартный кодL:FileName = path()&'\Отчеты\Отчет по услуге.xls'copy('.\Forms\ОтчетПоУслуге.xls',L:FileName)l:OLE{'workbooks.open("' & clip(l:FileName) & '")'}При открытии Эксел выдает сообщение "BIND has not been called for "f:\Work\Отчеты\Отчет по услуге.xls"Закрываешь его, дальше все нормально отрабатывает.... ???
Непонятно. Может быть это связано с русской кодировкой ?
Если на компьютере не правильно установлена кодовая страница - MS Excel вместо русских имен может получать кракозябры.
Вот абсолютно рабочий код, проверил, все работает. В принципе все тоже самое:

Код: Выделить всё

   Object_                        = Create(0,Create:Ole)
   Object_{Prop:Create}    = 'Excel.Application' !'Excel.Sheet'

    If Object_{'Application.Name'} = 'No ole automation interface'
       Destroy(Object_)
       Clear(Object_)
    else
       Object_{'Application.ReferenceStyle'} = 1
       Object_{'Application.Workbooks.Open("' & Clip(Left(Loc:XlsFileName)) & '")'}
       Object_{'Application.DisplayAlerts'} = False
    end
Андрей писал(а): 1. Надо выделить диапазон (несколько) столбцов по их числовому, а не буквенному обозначению. Подыскал подходящий оператор, опробовал через макрос в Экселе - работает ! Вот он - Range(Columns(7), Columns(10)).SelectПереписываю в клашу - l:ole{'Range(Columns(7), Columns(10)).Select'} или еще так -l:ole{'ActiveSheet.Range(Columns(7), Columns(10)).Select'}- не работает ! ???
Странно. Может быть не заморачиваться и просто преобразовать номер колонки в буквенное обозначение ?
Получится, что то вроде Range(GetABC(7) & ':' & GetABC(10)) ... и никаких проблем. ;)

Код: Выделить всё

GetABC               PROCEDURE  (Column_)
XResult String(3)
  CODE
  If (Column_ > 0) and (Column_ < 16385)

     Column_ -= 1  
     Clear(XResult)

     Loop While Column_ >= 26
       XResult = Chr((Column_ % 26) + 65) & Clip(XResult)
       Column_ = Int(Column_ / 26) - 1
     end

     Return(Clip(Left(Chr(Column_+ 65) & Clip(XResult))))
  else
     Return('A')
  end

Несколько проблемок с Excel

Добавлено: 11 Март 2015, 10:52
morkovin
Прошу у кого такую связку можно проверить - 9.1.11497+Win 7 64+Excel 2010 - работает ли ?
Может дело в этом (был установлен 64-х разр. Office)?:
Office 2010 is the first version of Office with a native 64 bit version, but by default, most users will be running the 32 bit version of Office 2010. The default setup for Office 2010 will install the 32 bit edition even on 64 bit systems so you can easily run older addins and VBA scripts for Office
Подробно:
http://www.howtogeek.com/howto/24259/be ... fice-2010/

Несколько проблемок с Excel

Добавлено: 13 Март 2015, 9:18
Андрей
Благодарю откликнувшихся ! Что получается:
1. Не все корректные макросы отрабатываются через OLE ? В чем тут может быть дело ? Range(Columns(Col1), Columns(Col2)) -так и не удалось заставить отработать, спасибо Игорю за функцию преобразования номера колонки в буквенное обозначение, работает, придется ей пользоваться.

2. "BIND has not been called for "f:\Work\Отчеты\Отчет по услуге.xls" - не удалось победить ! Полная замена русских имен файлов и папок на латинские не помогает.... Что еще попробовать ?

3. Проблема связки 9.1.11497+Win 7 64+Excel 2010 - вдруг сама собой исчезла ! Не... ну не могло же мне почудиться, мне же приходилось для отладки запускать под эмулятором WinXP, а тут забыл переключиться - е мое - работает !

Несколько проблемок с Excel

Добавлено: 13 Март 2015, 9:35
Игорь Столяров
1.
Андрей писал(а): Не все корректные макросы отрабатываются через OLE ? В чем тут может быть дело ? Range(Columns(Col1), Columns(Col2))
Немного некорректно про макросы. Конкретно макросы (подпрограммы на VBA MS Excel) здесь вообще не причем.
Более того, если напишешь свой код в виде макроса MS Excel и выполнишь его вызов из программы - то все будет хорошо.
Вопрос скорее в том, что через механизм OLE (ActivX) можно получить доступ не ко всем внутренним операциям MS Excel.
Толкового описания я не видел, иногда приходится выворачиваться методом тыка, используя то, что доступно и работает.

Здесь нужно использовать другие механизмы взаимодействия с MS Excel.
Например, есть набор библиотек EasyExcel в котором реализован функционал, который через OLE (ActivX) вообще не работает.
Про работу с OpenOffice.org / Libre Calc я просто молчу - там вообще свой мир, причем достаточно грустный в понимании ... ;)

2. Попробуй мой код для открытия XLS файла, в качестве имени файла задай "c:\test.xls". Работает ?

Несколько проблемок с Excel

Добавлено: 13 Март 2015, 10:05
gopstop2007
"f:\Work\Отчеты\Отчет по услуге.xls"
а двойные слеши \\ не пробовали?

Несколько проблемок с Excel

Добавлено: 13 Март 2015, 10:18
kreator
Игорь Столяров писал(а):2. Попробуй мой код для открытия XLS файла, в качестве имени файла задай "c:\test.xls". Работает ?
У меня и его код работает. Надо видеть весь код. А может copy не успевает отработать (Win7 работает при копировании своеобразно)? И зачем вообще здесь эта команда? Открой файл из \Forms, проведи действия через OLE и сохрани в \Отчёты.

Несколько проблемок с Excel

Добавлено: 13 Март 2015, 13:51
Ал
Андрей писал(а):"f:\Work\Отчеты\Отчет по услуге.xls"
"f:\Work\Отчеты\Отчет-по-услуге.xls" ?
"f:\Work\Отчеты\Отчет_по_услуге.xls" ?
"f:\Work\REPORT\..." ?

ps
ещё забыл про нюанс - если в конце дата, то можно через пробел, т.е. символ _ только между русскими нужно
\Отчет_по_услуге 13-03-2015.xls
Видимо dexcel используете?
Если другими средствами - '_' не потребуется

Несколько проблемок с Excel

Добавлено: 17 Март 2015, 14:19
Андрей
Нашел причину, прошу прощения за беспокойство, глаз замылился - не увидел, как после l:OLE{'workbooks.open("' & clip(l:FileName) & '")'}
стоял уж не помню зачем... if error() then message(error()).