Форум » GUI » Работа с Ole из HBWIN » Ответить

Работа с Ole из HBWIN

Andrey: Pasha пишет: [quote]после этого можно перейти на использование класса win_oleAuto из библиотеки hbwin, заменив строку oExcel := CreateObject( "Excel.Application" ) на win_oleCreateObject( "Excel.Application" ) Используя класс win_oleAuto, можно вместо передачи через буфер обмена передавать в Excel всю таблице одним вызовом __oleVariantNew() В принципе передача через буфер обмена фрагментами по 20к тоже работает быстро, но можно и делать это прямой записью. [/quote] Сделал такую конструкцию: [pre2]#xcommand TRY => BEGIN SEQUENCE WITH {|__o| break(__o) } #xcommand CATCH [<!oErr!>] => RECOVER [USING <oErr>] <-oErr-> ..... Try oExcel := win_oleCreateObject( "Excel.Application" ) Catch MsgStop( "Excel not available. [" + win_oleErrorText() + "]", "Error" ) Return Nil End[/pre2] В системе, где не установлен Эксель, не работает !!! Прога вылетает далее на обращении к oExcel:WorkBooks:Add()...: Error BASE/1004 No exported method: WORKBOOKS Called from WORKBOOKS(0) Called from BRW4XLSOLE(74) in module: Tsb4xlsOle.prg Как нужно правильно сделать ?

Ответов - 53, стр: 1 2 3 All

Andrey: Тестировал программу в Office 2003, 2007, 2010 - экспорт нормально работает. Поставил в Oracle VM VirtualBox Win7 32bit + Office 2016. Программа экспорта в Ворд работает отлично, БЕЗ ВЫЛЕТА !!! Если тестирую на Win10 64bit + Office 2016 на игровом компе (там 8 ядер, 32 ОЗУ), то программа продолжает вылетать. Может быть из-за того что комп не "офисный" ? Может и криво установлен Офис, с какими то дополнениями. Там доп.вопросы возникают - типа Word программа не по умолчанию. Вот такое сообщение: Т.е. нужно тестировать дальше программу на Office 2016 на других компах.

Andrey: Всем привет ! Выгружать больше 32767 строк в WinWord НЕЛЬЗЯ ! Ограничение WinWord 2003-2016. Выгружать больше 65533 строк в Excel НЕЛЬЗЯ ! Ограничение Excel 2003. В OO Calc и Excel 2007 - 2016 можно выгружать больше (сколько не уточнял), но появляется окно с предупреждением, которое чаще всего висит под моей программой, так как Экселем запущен в скрытом режиме. А Юзер и не видит это окно, и сразу претензия - программа висит и не работает. Замучился с этим. Как сделать, чтобы это окно можно было выводит на передний план ? Или есть возможность в коде, как то игнорировать такие предупреждения ? P.S. Кстати такие типовые предупреждения появляются и в Ворде и Экселе, если версии созданных документов не совместимы. Юзеру трудно объяснить, как с этим бороться. Хотелось что бы такие сообщения выводились на передний план экрана.

Pasha: Ээ. так есть же oExcel:DisplayAlerts, о котором здесь стотыщмильёнов раз говорилось


Dima: Pasha пишет: о котором здесь стотыщмильёнов раз говорилось та даже больше ))

Andrey: Pasha пишет: так есть же oExcel:DisplayAlerts, о котором здесь стотыщмильёнов раз говорилось Забыл про это... СПАСИБО !

Pasha: Андрей, я опять запустил твой демо с Excel 2016 Excel дуркует. Идут ошибки, каждый раз в разном месте: Error WINOLE/1006 Argument error: _SIZE (DOS Error -2146777998) Called from WIN_OLEAUTO:_SIZE(0) Called from BRW4XLSOLE(122) in module: Tsb4xlsOle.prg Error WINOLE/1006 Argument error: _SIZE (DOS Error -2146777998) Called from WIN_OLEAUTO:_SIZE(0) Called from BRW4XLSOLE(279) in module: Tsb4xlsOle.prg Error WINOLE/1009 No exported method: FONT (DOS Error -2147418111) Called from WIN_OLEAUTO:FONT(0) Called from BRW4XLSOLE(166) in module: Tsb4xlsOle.prg Error WINOLE/1008 No exported variable: BOLD (DOS Error -2147418111) Called from WIN_OLEAUTO:_BOLD(0) Called from BRW4XLSOLE(141) in module: Tsb4xlsOle.prg Error WINOLE/1007 Argument error: FONT (DOS Error -2147418111) Called from WIN_OLEAUTO:FONT(0) Called from BRW4XLSOLE(166) in module: Tsb4xlsOle.prg Правда один раз пример отработал до конца, обойдя все мины с обращениями к Font, Bold, Size и тому подобное. Я не удивлюсь, если завтра все заработает безупречно. И вопрос: Подскажите пожалуйста почему так происходит и как исправить ?

Andrey: Pasha пишет: Андрей, я опять запустил твой демо с Excel 2016 Excel дуркует. Идут ошибки, каждый раз в разном месте: А может от Офиса это зависит ? Попробуй на другом компе.... Я писал ранее: Тестировал программу в Office 2003, 2007, 2010 - экспорт нормально работает. Поставил в Oracle VM VirtualBox Win7 32bit + Office 2016. Программа экспорта в Ворд работает отлично, БЕЗ ВЫЛЕТА !!! Если тестирую на Win10 64bit + Office 2016 на игровом компе (там 8 ядер, 32 ОЗУ), то программа продолжает вылетать, но ТОЛЬКО Ворд вылетает. Эксель не вылетает ! Может быть из-за того что комп не "офисный" ? Может и криво установлен Офис, с какими то дополнениями. Там доп.вопросы возникают - типа Word программа не по умолчанию. Как программу эту доделаю (твою доработку тоже жду), то выложу для тестировки всем желающим.

SergKis: Andrey [pre2] Если исп. вместо oSheet:Cells( nLine, nColHead ):Value := uData // oSheet:Cells( nLine, nCol ):Borders():LineStyle := xlContinuous oSheet:Cells( nLine, nColHead ):Font:Name := aFont[ 1 ] oSheet:Cells( nLine, nColHead ):Font:Size := aFont[ 2 ] oSheet:Cells( nLine, nColHead ):Font:Bold := aFont[ 3 ] так oSCell := oSheet:Cells( nLine, nColHead ) ? procname(), procline(), oSCell // oSCell:Value := uData oCFnt := oSCell:Font ? procname(), procline(), oCFnt, aFnt[1], aFnt[2], aFnt[3] oCFnt:Name := aFont[ 1 ] oCFnt:Size := aFont[ 2 ] oCFnt:Bold := aFont[ 3 ] oSCell:Value := uData // переставить DoMessageLoop() // сначала без этой строки потом с ней [/pre2]

Andrey: SergKis пишет: Если исп. вместо Да у меня не вылетает вообще... Нужно Павла просить, чтобы попробовал. Pasha пишет: И вопрос: Подскажите пожалуйста почему так происходит и как исправить ? Ну блин, нашли кого спрашивать... Для меня вообще это загадки ...

Pasha: Запустил тест десяток раз. Один раз отработал до конца, остальные попытки дают вылеты в самых разных местах: при обращении к Font, Size, Cells, Name, Value Так что вряд ли такие изменения помогут. Не в одном, так в другом месте будет вылет. Причина непонятна. Как я уже говорил, сталкиваюсь с таким поведением последних версий Office не первый раз. Запустил свою программу, и прогнал различные варианты выгрузки в Excel. Вылет в некоторых случаях происходит, в некоторых нет.

PSP: Может не в тему, но навеяло: вспомните, как винда10 удаляет файл. Даже маленький. Такое впечатление, что сначала она его куда-то отправляет, а потом уже удаляет. Может и со свежими офисами такая же петрушка?

Dima: Pasha пишет: Вылет в некоторых случаях происходит, в некоторых нет. Та же фигня , но в версии 2003 все норм

Pasha: Плохая новость. Есть повод поднять темку. Моя винда с экселем с прошлого раза не глючит, но возникла другая проблема у клиента. Алгоритм у меня такой. В документе помечена строка в качестве шаблона (образца). Мне надо заполнить таблицу с данными, и для начала сделать копию этой строки энцать раз. Я это делаю незамысловатым копи-пасте в цикле: Function CopyExcelRows(oDoc, oSheet, cRow, nCount) Local nRow, nCopied := 1, nCopy, s1, cAdr // перемещение на строку oDoc:Goto(cRow) // адрес строки cAdr := oDoc:Selection:Address(.t.,, 1) s1 := 2 if ! (Substr(cAdr, 2, 1) >= '0' .and. Substr(cAdr, 2, 1) >= '9') s1 := At('$', Substr(cAdr, 2)) + 2 endif nRow := Val(Substr(cAdr, s1)) if nRow # 0 // копирование nCount строк while nCopied < nCount nCopy := Min(nCopied, nCount - nCopied) oSheet:Rows(StrTrim(nRow) + ":" + StrTrim(nRow + nCopy - 1)):Copy() oSheet:Rows(StrTrim(nRow+nCopied)+":"+StrTrim(nRow+nCopied)):Insert(-4121) // xlDown nCopied += nCopy enddo else Alert('Неверная закладка ' + cRow) endif Return nRow На злополучном компе эксель при копировании стал выдавать ошибку: "Рисунок слишком велик и будет усечен", и строки естественно не копируются. Хотя там копируется всего-то несколько десяток строк, и никакого рисунка не наблюдается. Поиск в гугле находит массу аналогичных жалоб на подобную ошибку, и обычные шаманские рекомендации как ее преодолеть.



полная версия страницы