Автор | Сообщение |
|
| постоянный участник
|
Пост N: 5911
Зарегистрирован: 12.09.06
|
|
Отправлено: 09.06.18 13:32. Заголовок: Работа с Ole из HBWIN
Pasha пишет: цитата: | после этого можно перейти на использование класса win_oleAuto из библиотеки hbwin, заменив строку oExcel := CreateObject( "Excel.Application" ) на win_oleCreateObject( "Excel.Application" ) Используя класс win_oleAuto, можно вместо передачи через буфер обмена передавать в Excel всю таблице одним вызовом __oleVariantNew() В принципе передача через буфер обмена фрагментами по 20к тоже работает быстро, но можно и делать это прямой записью. |
| Сделал такую конструкцию: #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 В системе, где не установлен Эксель, не работает !!! Прога вылетает далее на обращении к 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
[только новые]
|
|
|
| постоянный участник
|
Пост N: 5940
Зарегистрирован: 12.09.06
|
|
Отправлено: 04.07.18 22:46. Заголовок: Тестировал программу..
Тестировал программу в Office 2003, 2007, 2010 - экспорт нормально работает. Поставил в Oracle VM VirtualBox Win7 32bit + Office 2016. Программа экспорта в Ворд работает отлично, БЕЗ ВЫЛЕТА !!! Если тестирую на Win10 64bit + Office 2016 на игровом компе (там 8 ядер, 32 ОЗУ), то программа продолжает вылетать. Может быть из-за того что комп не "офисный" ? Может и криво установлен Офис, с какими то дополнениями. Там доп.вопросы возникают - типа Word программа не по умолчанию. Вот такое сообщение: Т.е. нужно тестировать дальше программу на Office 2016 на других компах.
|
|
|
|
| постоянный участник
|
Пост N: 5941
Зарегистрирован: 12.09.06
|
|
Отправлено: 06.07.18 14:20. Заголовок: Всем привет ! Выгру..
Всем привет ! Выгружать больше 32767 строк в WinWord НЕЛЬЗЯ ! Ограничение WinWord 2003-2016. Выгружать больше 65533 строк в Excel НЕЛЬЗЯ ! Ограничение Excel 2003. В OO Calc и Excel 2007 - 2016 можно выгружать больше (сколько не уточнял), но появляется окно с предупреждением, которое чаще всего висит под моей программой, так как Экселем запущен в скрытом режиме. А Юзер и не видит это окно, и сразу претензия - программа висит и не работает. Замучился с этим. Как сделать, чтобы это окно можно было выводит на передний план ? Или есть возможность в коде, как то игнорировать такие предупреждения ? P.S. Кстати такие типовые предупреждения появляются и в Ворде и Экселе, если версии созданных документов не совместимы. Юзеру трудно объяснить, как с этим бороться. Хотелось что бы такие сообщения выводились на передний план экрана.
|
|
|
|
| Администратор
|
Пост N: 3764
Зарегистрирован: 23.05.05
|
|
Отправлено: 06.07.18 14:37. Заголовок: Ээ. так есть же oExc..
Ээ. так есть же oExcel:DisplayAlerts, о котором здесь стотыщмильёнов раз говорилось
|
|
|
|
| |
Пост N: 6867
Зарегистрирован: 17.05.05
|
|
Отправлено: 06.07.18 14:48. Заголовок: Pasha пишет: о кото..
Pasha пишет: цитата: | о котором здесь стотыщмильёнов раз говорилось |
| та даже больше ))
|
|
|
|
| постоянный участник
|
Пост N: 5942
Зарегистрирован: 12.09.06
|
|
Отправлено: 06.07.18 15:15. Заголовок: Pasha пишет: так ес..
Pasha пишет: цитата: | так есть же oExcel:DisplayAlerts, о котором здесь стотыщмильёнов раз говорилось |
| Забыл про это... СПАСИБО !
|
|
|
|
| Администратор
|
Пост N: 3774
Зарегистрирован: 23.05.05
|
|
Отправлено: 14.07.18 16:45. Заголовок: Андрей, я опять запу..
Андрей, я опять запустил твой демо с 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 и тому подобное. Я не удивлюсь, если завтра все заработает безупречно. И вопрос: Подскажите пожалуйста почему так происходит и как исправить ?
|
|
|
|
| постоянный участник
|
Пост N: 5962
Зарегистрирован: 12.09.06
|
|
Отправлено: 14.07.18 18:32. Заголовок: Pasha пишет: Андрей..
Pasha пишет: цитата: | Андрей, я опять запустил твой демо с Excel 2016 Excel дуркует. Идут ошибки, каждый раз в разном месте: |
| А может от Офиса это зависит ? Попробуй на другом компе.... Я писал ранее: Тестировал программу в Office 2003, 2007, 2010 - экспорт нормально работает. Поставил в Oracle VM VirtualBox Win7 32bit + Office 2016. Программа экспорта в Ворд работает отлично, БЕЗ ВЫЛЕТА !!! Если тестирую на Win10 64bit + Office 2016 на игровом компе (там 8 ядер, 32 ОЗУ), то программа продолжает вылетать, но ТОЛЬКО Ворд вылетает. Эксель не вылетает ! Может быть из-за того что комп не "офисный" ? Может и криво установлен Офис, с какими то дополнениями. Там доп.вопросы возникают - типа Word программа не по умолчанию. Как программу эту доделаю (твою доработку тоже жду), то выложу для тестировки всем желающим.
|
|
|
|
| постоянный участник
|
Пост N: 1934
Зарегистрирован: 17.02.12
|
|
Отправлено: 14.07.18 19:12. Заголовок: Andrey Если исп. вм..
Andrey Если исп. вместо 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() // сначала без этой строки потом с ней
|
|
|
|
| постоянный участник
|
Пост N: 5963
Зарегистрирован: 12.09.06
|
|
Отправлено: 14.07.18 20:16. Заголовок: SergKis пишет: Если..
SergKis пишет: Да у меня не вылетает вообще... Нужно Павла просить, чтобы попробовал. Pasha пишет: цитата: | И вопрос: Подскажите пожалуйста почему так происходит и как исправить ? |
| Ну блин, нашли кого спрашивать... Для меня вообще это загадки ...
|
|
|
|
| Администратор
|
Пост N: 3775
Зарегистрирован: 23.05.05
|
|
Отправлено: 14.07.18 20:43. Заголовок: Запустил тест десято..
Запустил тест десяток раз. Один раз отработал до конца, остальные попытки дают вылеты в самых разных местах: при обращении к Font, Size, Cells, Name, Value Так что вряд ли такие изменения помогут. Не в одном, так в другом месте будет вылет. Причина непонятна. Как я уже говорил, сталкиваюсь с таким поведением последних версий Office не первый раз. Запустил свою программу, и прогнал различные варианты выгрузки в Excel. Вылет в некоторых случаях происходит, в некоторых нет.
|
|
|
|
| постоянный участник
|
Пост N: 1462
Зарегистрирован: 27.01.07
|
|
Отправлено: 14.07.18 21:07. Заголовок: Может не в тему, но ..
Может не в тему, но навеяло: вспомните, как винда10 удаляет файл. Даже маленький. Такое впечатление, что сначала она его куда-то отправляет, а потом уже удаляет. Может и со свежими офисами такая же петрушка?
|
|
|
|
|
| |
Пост N: 6869
Зарегистрирован: 17.05.05
|
|
Отправлено: 14.07.18 21:18. Заголовок: Pasha пишет: Вылет ..
Pasha пишет: цитата: | Вылет в некоторых случаях происходит, в некоторых нет. |
| Та же фигня , но в версии 2003 все норм
|
|
|
|
| Администратор
|
Пост N: 3790
Зарегистрирован: 23.05.05
|
|
Отправлено: 23.08.18 16:40. Заголовок: Плохая новость. Есть..
Плохая новость. Есть повод поднять темку. Моя винда с экселем с прошлого раза не глючит, но возникла другая проблема у клиента. Алгоритм у меня такой. В документе помечена строка в качестве шаблона (образца). Мне надо заполнить таблицу с данными, и для начала сделать копию этой строки энцать раз. Я это делаю незамысловатым копи-пасте в цикле: 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 На злополучном компе эксель при копировании стал выдавать ошибку: "Рисунок слишком велик и будет усечен", и строки естественно не копируются. Хотя там копируется всего-то несколько десяток строк, и никакого рисунка не наблюдается. Поиск в гугле находит массу аналогичных жалоб на подобную ошибку, и обычные шаманские рекомендации как ее преодолеть.
|
|
|
Ответов - 53
, стр:
1
2
3
All
[только новые]
|
|