Как стать автором
Обновить

Комментарии 20

Я понимаю, что я давно от жизни отстал, но для Windows описание будет? Или на документацию как запустить на оной, ссылку скиньте, пожалуйста.
Все будет ровно точно так же — пейтон везде работает одинаково. Как установить PyUNO на Windows — сейчас поищу.
Спасибо большое, рабоет.
работает
Сейчас актуальна работа с LibreOffice :)
Хотя отличаться будет, наверно, только именами сервисов.
Разумеется, да.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Угу, спасибо. Не знал.
В самой заметке добавил ссылку.

А он умеет читать/изменять готовые файлы?
НЛО прилетело и опубликовало эту надпись здесь
Да, спасибо огромное еще раз. Я почему-то сразу стал искать биндинги, когда мне потребовалось. У меня не было никаких серверных задач.

Но этот xlwt выглядит явно гораздо более разумным решением. Он, небось, напрямую с xml — через схемы преобразования — шпарит. Судя по «необходимо открыть файл, создать копию в памяти, дописывать в него, и уже его сохранять».
НЛО прилетело и опубликовало эту надпись здесь
Угу, еще раз спасибо, обновил заметку.
Было дело я тоже колдовал с экселем под линукс. Правда, остановился на xlwt и дописал поверх него утилитку для более простого построения. Может будет кому полезно: github.com/lightcaster/xlrep
Код с заменой нерабочий. Вот накатал скриптик, в котором всё исправлено:

#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys
import uno
from os.path import abspath, isfile, splitext

PORT = 8100

if len(sys.argv) < 4:
print 'Usage: oreplace SEARCH REPLACE PATH'
sys.exit(0)

inputFile = sys.argv[3]
searchString = sys.argv[1]
replaceString = sys.argv[2]

localCtx = uno.getComponentContext()
localSmgr = localCtx.ServiceManager
uresolver = localSmgr.createInstanceWithContext(
"com.sun.star.bridge.UnoUrlResolver", localCtx)
ctx = uresolver.resolve( \
"uno:socket,host=localhost,port=%d;urp;StarOffice.ComponentContext" % PORT)
smgr = ctx.ServiceManager
desktop = smgr.createInstanceWithContext(
"com.sun.star.frame.Desktop", ctx)

document = desktop.loadComponentFromURL( \
uno.systemPathToFileUrl(abspath(inputFile)), "_blank", 0, tuple([]))

doc = document

if hasattr(document, 'getSheets'):
sheets = document.getSheets()
doc = sheets.getCellRangesByName(u'A1:AMJ1048576')[0]

if not hasattr(doc, 'createReplaceDescriptor'):
print 'Unknown document type'
sys.exit(1)

try:
replaceDesc = doc.createReplaceDescriptor()
replaceDesc.SearchString = searchString
replaceDesc.ReplaceString = replaceString

found = doc.replaceAll(replaceDesc)

document.store()
finally:
document.close(True)
упс… извините за пробелы между строками кода. В предпросмотре всё было нормально. Как это можно исправить?
Исправить никак, на будущее — в правом верхнем углу редактора комментария есть ссылка «html-теги». Обратите внимание там на третий пункт: строчку «source …».

Что касается поиска — я специально предложил поиск для обычного документа, не для электронной таблицы. Главное — принцип, дальше каждый уж сам извращается, как умеет.
понятно, что у вас наиболее упрощенный пример, но мне просто понадобился поиск и по таблицам, вот и выложил как есть.
Ага, спасибо, вам уже зачлось в карме.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории