Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

1С+OpenOffice. Ускорение записи в ячейку

1С+OpenOffice. Ускорение записи в ячейку
Я
   IdoL2k
 
07.11.17 - 15:24
Есть обработка, которая заполняет шаблон в виде табличного документа определенными данными. Запись данных в ячейку выполняется с помощью методов SetString() и SetValue().
Document = Desktop.LoadComponentFromURL(УРЛ, "_blank", 0, Args);
Sheets = Document.getSheets();
Sheet = Sheets.getByIndex(0);
Для ш=1 из ТаблицаРезультата.Колонки Цикл
    Cell = Sheet.getCellByPosition(ш,0);
    Cell.setString("Колонка "+ш);
КонецЦикла;

В пустом шаблоне обработка работает достаточно быстро. Но если шаблон представляет из себя книгу, в которой имеются достаточно "тяжелые" листы, то выполнение метода SetString() начинает отнимать много времени и обработка начинает адово тормозить. Такое ощущение, что при заполнении значения выполняется пересчет значений в других ячейках, несмотря на то, что они не связаны с заполняемыми.
Пробовал отключить в настройках офиса автообновление данных - Сервис / Содержимое ячейки / Вычислять автоматически - ускорения нет.
Попробовал добавить отключение автообновления перед заполнением шаблона:

Document.lockControllers();
Document.addActionLock();
Document.enableAutomaticCalculation(False);

...заполнение шаблона...

Document.enableAutomaticCalculation(True);
Document.calculateAll();
Document.removeActionLock();
Document.unlockControllers();

Результат нулевой. Как еще можно оптимизировать заполнение ячеек в табличном документе? Или избежать тормозов при заполнении сложных документов можно только при использовании "пакетной" записи с помощью COMSafeArray?
 
 
   mingw
 
1 - 07.11.17 - 15:31
Внутри "args" есть "'Hidden', not Visible"?
   IdoL2k
 
2 - 07.11.17 - 15:33
(1) Инициализация документа выгляждит следующим образом

    Попытка
        ServiceManager = Новый COMОбъект("com.sun.star.ServiceManager");
    Исключение
        Предупреждение(ОписаниеОшибки() + Символы.ПС + "программа OpenOffice не установлена на данном компьютере!");
        Возврат;
    КонецПопытки;
    Desktop = ServiceManager.createInstance("com.sun.star.frame.Desktop");
    Свойства = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue");
    Свойства.Name = "AsTemplate";
    Свойства.Value = Истина;
    Args = Новый COMSafeArray("VT_VARIANT", 3);
    Args.SetValue(0, Свойства);
    Свойства1 = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue");
    Свойства1.Name = "Hidden";
    Свойства1.Value = Истина;
    Args.SetValue(1, Свойства1);
    УРЛ = ПривестиФайлКУРЛ(ShablonOO);
    Document = Desktop.LoadComponentFromURL(УРЛ, "_blank", 0, Args);
   IdoL2k
 
3 - 07.11.17 - 15:34
(1) Значение свойства Hidden - Истина
   mingw
 
4 - 07.11.17 - 15:41
(3) Да понял

Выкинуть ActiveX|COM (писать сразу xlsx/ods чем другим) или комп шустрее
   IdoL2k
 
5 - 07.11.17 - 15:45
(4) Какие есть альтернативные методы записи в ods? Где то можно пример глянуть?
   vvp91
 
6 - 07.11.17 - 16:00
(5) ТабличныйДокумент.Записать("МойФайл.ods", ТипФайлаТабличногоДокумента.ODS);
   IdoL2k
 
7 - 07.11.17 - 16:36
(6) просто сформировать табличный документ в 1С - не вариант. Шаблон представляет из себя достаточно сложную книгу с нарядными листами, формулами, расчетами.
Решением задачи по ускорению я вижу отключение расчетов при каждом изменении ячейки, выполнение расчетов только после заполнения всех ячеек.
Хотя, возможно, я ошибаюсь и долгая запись данных в ячейку связана с чем то другим, а не с пересчетом всей книги...
   mingw
 
8 - 07.11.17 - 16:38
(7) Шаблон = формулы?
Загрузить/прочитать в 1С - выполнить формулы в 1С - записать готовое.

Убери Ёкселя из уравнения - легче жить!
   Сияющий в темноте
 
9 - 07.11.17 - 20:34
если сложная книга с картинками,то учиться работать с пдф,так как опен немного странноват для этого

Список тем форума
Рекламное место пустует  Рекламное место пустует
Закон Брукера: Даже маленькая практика стоит большой теории.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует