On-line: MIKHAIL, гостей 1. Всего: 2 [подробнее..]
АвторСообщение
постоянный участник




Пост N: 5776
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 14.03.18 12:45. Заголовок: Экспорт через oBrw:ExcelOle() - куда копать ?


Делаю экспорт в своей проге на МиниГуи через oBrw:ExcelOle()
Экспорт по принципу как в примере, проект вот тут - https://cloud.mail.ru/public/JNeH/xGmMBvmVD
Вырезал из большого проекта, в отдельную программу кусок где идёт экспорт через ОЛЮ.
У меня Excel2003, ОЛЯ работает нормально.

У заказчика Excel2007, валиться выгрузка через ОЛЮ. Вот такая ошибка:
Error BASE/1122 Неверный аргумент: TRANSFORM
Called from TRANSFORM(0)
Called from TSBROWSE:EXCELOLE(4922) in module: h_tbrowse.prg
Called from EXCELXLS_A14(605) in module: Source\tsb_prnA14.prg
Called from (b)FORM_TSB_A14(140) in module: Source\tsb_prnA14.prg
Called from _DOCONTROLEVENTPROCEDURE(1806) in module: h_windows.prg
Called from EVENTS(1733) in module: h_events.prg
Called from DOMESSAGELOOP(0)
Called from _ACTIVATEWINDOW(1460) in module: h_windows.prg
Called from FORM_TSB_A14(158) in module: Source\tsb_prnA14.prg


Поставил в виртуалке как у заказчика WinXP и Офис2007. В виртуалке ОЛЯ работает на таком же примере нормально.
Ну и куда копать дальше ?

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 8 [только новые]


Администратор




Пост N: 3702
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 14.03.18 17:49. Заголовок: У transform есть 2 п..


У transform есть 2 параметра: value и picture/ Ошибка 1122 генерируется, если не задан picture, или не задан value или value не является простым типом: NLCD.
В коде метода ExcelOle перед вызовом tranform в строке 4922 надо проверить, выполняются ли эти условия.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5779
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 14.03.18 18:15. Заголовок: Поставил трассировку..


Поставил трассировку в этом куске
         uData := Eval( ::aColumns[ nCol ]:bData )   // строка 4911 
? "uData := ", uData, " nCol=", nCol
If ValType( uData ) == "C" .and. At( CRLF, uData ) > 0
uData := StrTran( uData, CRLF, "&&" )

If AScan( aRepl, nCol ) == 0
AAdd( aRepl, nCol )
EndIf
EndIf
? ValType( uData ), uData, ::aColumns[ nCol ]:cPicture
If ::aColumns[ nCol ]:cPicture != Nil
uData := Transform( uData, ::aColumns[ nCol ]:cPicture )
EndIf

Валиться программа на первой же записи !
Вот результат трассировки:
uData :=	1	  nCol=	1	 
N 1 999 999
uData := Бакинский Пер. (ул.) nCol= 2
C Бакинский Пер. (ул.) xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
uData := 20 nCol= 3
C 20 xxxxxxx
uData := 0 nCol= 4
N 0 99999999
uData := 3 nCol= 5
N 3 99999999
uData := 32 nCol= 6
C 32 xxxxxxxxx
uData := 9617311164 nCol= 7
C 9617311164 999999999999
uData := 1 nCol= 8
N 1 999999
uData := -1320.00 nCol= 9
N -1320.00 9999999.99
uData := . . nCol= 10
D . . xxxxxxxxxxx
uData := NIL nCol= 11
U NIL 9999999.99

Как сделать в исходнике, чтобы не "валился" этот экспорт ?


Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3704
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 14.03.18 18:24. Заголовок: Andrey пишет: Как с..


Andrey пишет:

 цитата:
Как сделать в исходнике, чтобы не "валился" этот экспорт ?



Очевидно, что надо проверять udata на nil. Заодно не помешает проверка на массив, объект и прочие сложные типы.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5780
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 14.03.18 23:06. Заголовок: Полдня убил на то ка..


Полдня убил на то как воссоздать ошибку у себя на компе, добился наконец то.
Думал Эксель виноват, ан нет, ошибка чисто в коде.
Вот табличка демонстрирующая ошибку:


Pasha пишет:

 цитата:
Очевидно, что надо проверять udata на nil. Заодно не помешает проверка на массив, объект и прочие сложные типы.


Я не думаю, что нужно проверять на массив и другие сложные типы.
Иначе Tsbrowse не покажется на экране, а свалиться раньше времени.
Подойдёт ли такая проверка:
      For nCol := 1 To Len( ::aColumns ) 
If aColSel != Nil .and. AScan( aColSel, nCol ) == 0
Loop
EndIf

uData := Eval( ::aColumns[ nCol ]:bData )

If ValType( uData ) == "C" .and. At( CRLF, uData ) > 0
uData := StrTran( uData, CRLF, "&&" )

If AScan( aRepl, nCol ) == 0
AAdd( aRepl, nCol )
EndIf
EndIf

uData := If( uData == NIL, "", Transform( uData, ::aColumns[ nCol ]:cPicture ) )

If ::aColumns[ nCol ]:cPicture != Nil // TSBROWSE:EXCELOLE(4922) in module: h_tbrowse.prg
uData := Transform( uData, ::aColumns[ nCol ]:cPicture )
EndIf

Поставил в тестовый пример, погонял на 4 типа L,D,N,C - работает вроде.

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3705
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 15.03.18 09:05. Заголовок: Andrey пишет: Подой..


Andrey пишет:

 цитата:
Подойдёт ли такая проверка:



Да. Тем более в других местах tsbrowse такая проверка есть.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1777
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 15.03.18 10:54. Заголовок: Andrey пишет uData :..


Andrey пишет
 цитата:
uData := If( uData == NIL, "", Transform( uData, ::aColumns[ nCol ]:cPicture ) )


Будут те же грабли, при :cPicture == NIL, напиши
Default uData := ""
вместо своей вставки

Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 1252
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 15.03.18 11:37. Заголовок: Pasha пишет: надо п..


Pasha пишет:

 цитата:
надо проверять udata на nil.


Благодарю за наводку
Я уже добавил такую проверку в h_tbrowse.prg для следующей сборки.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5781
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 15.03.18 17:36. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Я уже добавил такую проверку в h_tbrowse.prg для следующей сборки.


Спасибо !

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 169
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет