Найти - Пользователи
Полная версия: Скорость работы pyUNO
Начало » Python для экспертов » Скорость работы pyUNO
1
Lavrofff
Код.
def to_unicode(sequence):
ret_sequence = (unicode(value, "utf8") for value in sequence)
return ret_sequence


def build_header():
fields = \
["Дата", "Время", "Локатор", "Дата.Прод", "Время.Прод", "Тариф",
"АК.Сборы", "АГ.Сборы", "Доставка","Страховка", "Аэроэкспресс",
"Прочие сборы", "Оплачено", "Комиссия", "Транзакция", "Перечислено",
"Тип док.", "Номер док.", "ППР", "Взрослых", "Детей", "Младенцев",
"eTicket", "Билеты", "Туда-обратно", "Сегменты", "Сегмент 1",
"Дата вылета", "Коды тарифов", "Сегмент 2", "Дата вылета",
"Коды тарифов", "Сегмент 3", "Дата вылета", "Коды тарифов",
"Сегмент 4", "Дата вылета", "Коды тарифов"]
return to_unicode(fields)

def report_header(sheets):
for sheet in sheets:
fields = build_header()
column = 1
st = datetime.utcnow()
for field in fields:
sheet.write(1,column, field)
column += 1
for i in range(1, 39):
sheet.write(2, i, i)
print "for sheet writing header time", datetime.utcnow() - st
sheet определяется так. обертка над XSpreadSheet.
class oo_Sheet:
def __init__(self, sheet):
self.sheet_ = sheet
def write(self, row, col, value):
cell = self.sheet_.getCellByPosition(col, row)
if type(value) == type(str()) and len(value) != 0:
value = "'" + value
cell.setFormula(value)
Результат.

for sheet writing header time 0:00:00.711877
for sheet writing header time 0:00:00.710832
for sheet writing header time 0:00:00.691251
for sheet writing header time 0:00:00.689296

Слишком долго. Создан док так.
        props = ooHelper.oo_properties(OpenFlags="B",Hidden=True)
self.runner_ = ooHelper.OORunner()
self.desc_ = self.runner_.connect()
return self.desc_.loadComponentFromURL("private:factory/scalc", "_blank", 0, props)
connect в свою очередь вызывает startup и стартует soffice в хиден-режиме (если нету уже запущенного процесса).
Сам connect работает через pyUNO.

В свою очередь к примеру тот же XlsXcessive дает такие показатели на том же коде.

for sheet writing header time 0:00:00.005864
for sheet writing header time 0:00:00.004231
for sheet writing header time 0:00:00.004209
for sheet writing header time 0:00:00.002672

Реально-ли добиться такого через UNO? Если же нет, что лучше использовать, ooolib или что-то другое?
Isem
Даже если все это написать на С++, скорость не увеличится. Самые тормоза - это когда работаешь с ячейками по отдельности. Надо читать/писать сразу целыми диапазонами (щи'тами). Скорость увеличится в разы.
Lavrofff
Isem
Спасибо. Впринципе прикрутил ooolib.
Скорость на данном участке кода
for sheet writing header time 0:00:00.008813
for sheet writing header time 0:00:00.007813
for sheet writing header time 0:00:00.004560
for sheet writing header time 0:00:00.002244

Так что наверное закрою вопрос. Диапазонами писать не подходит, т.к. код используется с pyExceler, XlsXcessive в зависимости от желаемого формата файла.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB