|
Выгрузка данных в Оpen Office | ☑ | ||
---|---|---|---|---|
0
ikustow
06.09.17
✎
23:22
|
Приветствую, подскажите, пишу выгрузку в OpenCalc и столкнулся с тем, что значение которое я задаю не записывается в ячейку, хотя код выполняется без ошибок. Может кто знает какую особенность? до этого писал выгрузку для Excel подобных проблем не было. Код привожу ниже. Спасибо!
&НаСервере Функция ПрочитатьНаСервере(ПутьКФайлу,текЛист) Попытка ServiceManager = Новый COMОбъект("com.sun.star.ServiceManager"); Исключение //Предупреждение(ОписаниеОшибки() + Символы.ПС + "программа OpenOffice\LibreOffice не установлена на данном компьютере!"); Возврат Неопределено; КонецПопытки; Desktop = ServiceManager.createInstance("com.sun.star.frame.Desktop"); Свойства = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue"); Свойства.Name = "AsTemplate"; Свойства.Value = Истина; Args = Новый COMSafeArray("VT_VARIANT", 2); Args.SetValue(0, Свойства); Свойства1 = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue"); Свойства1.Name = "Hidden"; Свойства1.Value = Истина; Args.SetValue(1,Свойства1); Document = Desktop.LoadComponentFromURL(ПривестиФайлКУРЛ(ПутьКФайлу), "_blank", 0, Args); Sheets = Document.getSheets(); Sheet = Sheets.getByIndex(текЛист); begCol = 0; begRow = 0; endCol = Sheet.Data.GetLength(6) - 1; endRow = Sheet.Data.GetLength() - 1; нКол = 0; Значение = "Значение"; Sheet.getCellByPosition(2,2).SetString(Значение); Document.close(true); Desktop.terminate(); КонецФункции |
|||
1
Мэс33
06.09.17
✎
23:25
|
А сохранять документ не нужно? (опыта с OO нет).
|
|||
2
Мэс33
06.09.17
✎
23:25
|
Или close(true) - это и есть сохранение?
|
|||
3
ikustow
06.09.17
✎
23:27
|
(1) Пробовал перед Document.close(true); писать Document.Save(); дает ошибку. сейчас ищу материалы по работе с ОО, но в примерах, что нахожу везде Document.close(true) думаю это и есть сохранение
|
|||
4
Мэс33
06.09.17
✎
23:30
|
||||
5
Мэс33
06.09.17
✎
23:30
|
Document.store() - похоже это нужно
|
|||
6
ikustow
06.09.17
✎
23:38
|
(5) выдает ошибку : Ошибка при вызове метода контекста (Store)
Document.Store(); по причине: Произошла исключительная ситуация ([automation bridge] ): com.sun.star.task.ErrorCodeIOException: причем на одном форуме нашел пост с такой же ошибкой и там ему помог такой код Document.Store(); Document.Close(1); он тоже в итоге с ошибкой) ну в принципе проблема ясна, он просто не сохраняет, осталось теперь победить это) |
|||
7
h-sp
06.09.17
✎
23:50
|
(6) а если так
ТабДок.Записать("тратата.ods"); ?? |
|||
8
ikustow
07.09.17
✎
00:43
|
(5) (7) В общем вот рабочий вариант(может кому пригодится). В пути латинские буквы
scr = новый COMОбъект("MSScriptControl.ScriptControl"); scr.language = "javascript"; scr.eval("Massiv=new Array()"); Массив = scr.eval("Massiv"); ServiceManager = новый COMОбъект("com.sun.star.ServiceManager"); scr.AddObject("ServiceManager",ServiceManager); scr.eval("Massiv[0]=ServiceManager.Bridge_GetStruct('com.sun.star.beans.PropertyValue')"); scr.eval("Massiv[0].Name='Hidden'"); scr.eval("Massiv[0].Value=true"); Desktop = ServiceManager.createInstance("com.sun.star.frame.Desktop"); //ИмяФайла = "file://"+СтрЗаменить(ПутьКФайлу, "/", "\"); Document = Desktop.LoadComponentFromURL(ПривестиФайлКУРЛ(ПутьКФайлу), "_blank", 0, Массив); Листы = Document.getSheets(); Лист = Листы.getByIndex(0); //Реквизиты Лист.getCellByPosition(4,1).setString("Vendor:"); Лист.getCellByPosition(5,1).setString("Date of order:"); Лист.getCellByPosition(6,1).setString("Order No:"); Лист.getCellByPosition(7,1).setString("Reference No:"); Лист.getCellByPosition(8,1).setString("Currency:"); Лист.getCellByPosition(9,1).setString("Factory ship date:"); Document.store(); Document.close(true); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |