|   |   | 
| 
 | Выгрузка данных в О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); | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |