Несколько проблемок с Excel
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Несколько проблемок с Excel
Накопилось несколько проблемок с 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 - работает ли ?
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 - работает ли ?
-
- ✯ Ветеран ✯
- Сообщения: 5161
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
Несколько проблемок с Excel
Есть некие условности работы Clarion c ole Excel, на форуме периодически это обсуждается. Надо начать прежде всего с создания ole. Вот так работает в последних версиях (именно в той конфигурации как у Вас):
По первому вопросу решения не нашёл, задавал похожий вопрос - http://forum.clarionlife.net/phpbb/view ... f=1&t=3331.
По второму. У меня проблем нет. Может неправильное объявление ole. А ещё вероятнее, что файл xls не родной для последних Excel, при открытии может спрашивать чего-то.
Код: Выделить всё
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, при открытии может спрашивать чего-то.
We are hard at work… for you. 

- Игорь Столяров
- Ветеран движения
- Сообщения: 8031
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
Несколько проблемок с Excel
Непонятно. Может быть это связано с русской кодировкой ?Андрей писал(а): 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
Make Clarion Great Again ! 
- morkovin
- Ветеран
- Сообщения: 935
- Зарегистрирован: 20 Июль 2005, 14:53
- Откуда: Volgograd, Russia
- Благодарил (а): 9 раз
- Поблагодарили: 4 раза
- Контактная информация:
Несколько проблемок с Excel
Может дело в этом (был установлен 64-х разр. Office)?:Прошу у кого такую связку можно проверить - 9.1.11497+Win 7 64+Excel 2010 - работает ли ?
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/
WBR, morkovin
Несколько проблемок с Excel
Благодарю откликнувшихся ! Что получается:
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, а тут забыл переключиться - е мое - работает !
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, а тут забыл переключиться - е мое - работает !
- Игорь Столяров
- Ветеран движения
- Сообщения: 8031
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
Несколько проблемок с Excel
1.
Более того, если напишешь свой код в виде макроса MS Excel и выполнишь его вызов из программы - то все будет хорошо.
Вопрос скорее в том, что через механизм OLE (ActivX) можно получить доступ не ко всем внутренним операциям MS Excel.
Толкового описания я не видел, иногда приходится выворачиваться методом тыка, используя то, что доступно и работает.
Здесь нужно использовать другие механизмы взаимодействия с MS Excel.
Например, есть набор библиотек EasyExcel в котором реализован функционал, который через OLE (ActivX) вообще не работает.
Про работу с OpenOffice.org / Libre Calc я просто молчу - там вообще свой мир, причем достаточно грустный в понимании ...
2. Попробуй мой код для открытия XLS файла, в качестве имени файла задай "c:\test.xls". Работает ?
Немного некорректно про макросы. Конкретно макросы (подпрограммы на VBA MS Excel) здесь вообще не причем.
Более того, если напишешь свой код в виде макроса MS Excel и выполнишь его вызов из программы - то все будет хорошо.
Вопрос скорее в том, что через механизм OLE (ActivX) можно получить доступ не ко всем внутренним операциям MS Excel.
Толкового описания я не видел, иногда приходится выворачиваться методом тыка, используя то, что доступно и работает.
Здесь нужно использовать другие механизмы взаимодействия с MS Excel.
Например, есть набор библиотек EasyExcel в котором реализован функционал, который через OLE (ActivX) вообще не работает.
Про работу с OpenOffice.org / Libre Calc я просто молчу - там вообще свой мир, причем достаточно грустный в понимании ...

2. Попробуй мой код для открытия XLS файла, в качестве имени файла задай "c:\test.xls". Работает ?
Make Clarion Great Again ! 
-
- Полимат
- Сообщения: 1810
- Зарегистрирован: 25 Март 2009, 21:55
- Благодарил (а): 24 раза
- Поблагодарили: 10 раз
Несколько проблемок с Excel
а двойные слеши \\ не пробовали?"f:\Work\Отчеты\Отчет по услуге.xls"
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
-
- ✯ Ветеран ✯
- Сообщения: 5161
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
Несколько проблемок с Excel
У меня и его код работает. Надо видеть весь код. А может copy не успевает отработать (Win7 работает при копировании своеобразно)? И зачем вообще здесь эта команда? Открой файл из \Forms, проведи действия через OLE и сохрани в \Отчёты.Игорь Столяров писал(а):2. Попробуй мой код для открытия XLS файла, в качестве имени файла задай "c:\test.xls". Работает ?
We are hard at work… for you. 

-
- ✯ Ветеран ✯
- Сообщения: 1038
- Зарегистрирован: 08 Июль 2005, 6:48
- Откуда: Россия
- Поблагодарили: 1 раз
Несколько проблемок с Excel
"f:\Work\Отчеты\Отчет-по-услуге.xls" ?Андрей писал(а):"f:\Work\Отчеты\Отчет по услуге.xls"
"f:\Work\Отчеты\Отчет_по_услуге.xls" ?
"f:\Work\REPORT\..." ?
ps
ещё забыл про нюанс - если в конце дата, то можно через пробел, т.е. символ _ только между русскими нужно
\Отчет_по_услуге 13-03-2015.xls
Видимо dexcel используете?
Если другими средствами - '_' не потребуется
Несколько проблемок с Excel
Нашел причину, прошу прощения за беспокойство, глаз замылился - не увидел, как после l:OLE{'workbooks.open("' & clip(l:FileName) & '")'}
стоял уж не помню зачем... if error() then message(error()).
стоял уж не помню зачем... if error() then message(error()).