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

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Андрей
Старожил
Сообщения: 277
Зарегистрирован: 30 Октябрь 2005, 3:58

Несколько проблемок с 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 - работает ли ?
kreator
✯ Ветеран ✯
Сообщения: 5161
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

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

Сообщение 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, при открытии может спрашивать чего-то.
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

Сообщение 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/
WBR, morkovin
Андрей
Старожил
Сообщения: 277
Зарегистрирован: 30 Октябрь 2005, 3:58

Несколько проблемок с 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, а тут забыл переключиться - е мое - работает !
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8031
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

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

Сообщение Игорь Столяров »

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". Работает ?
Make Clarion Great Again ! 😎
gopstop2007
Полимат
Сообщения: 1810
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 24 раза
Поблагодарили: 10 раз

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

Сообщение gopstop2007 »

"f:\Work\Отчеты\Отчет по услуге.xls"
а двойные слеши \\ не пробовали?
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
kreator
✯ Ветеран ✯
Сообщения: 5161
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

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

Сообщение kreator »

Игорь Столяров писал(а):2. Попробуй мой код для открытия XLS файла, в качестве имени файла задай "c:\test.xls". Работает ?
У меня и его код работает. Надо видеть весь код. А может copy не успевает отработать (Win7 работает при копировании своеобразно)? И зачем вообще здесь эта команда? Открой файл из \Forms, проведи действия через OLE и сохрани в \Отчёты.
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 используете?
Если другими средствами - '_' не потребуется
Андрей
Старожил
Сообщения: 277
Зарегистрирован: 30 Октябрь 2005, 3:58

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

Сообщение Андрей »

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