Запись / чтение массивов данных в Open Office с использованием Python. У кого-нибудь есть пример кода?
поэтому я написал класс, который упрощает интерфейс с Excel или Gnumeric с помощью Python, и хотел бы расширить класс, чтобы включить Open Office. Я мог бы сделать это за 30 минут, если бы у меня была возможность сделать следующее:
- установить одно значение на произвольном лист и книга
- получить одно значение на произвольном листе и рабочей тетради
Если они медленные/есть способ сделать следующее, Мне также нужно уметь:
- установить/получить массив "'
- установить/получить матрицу "'
кроме того, возможность создавать и переименовывать листы было бы здорово.
Это крик, если кто-то работал над этим раньше. Если они дают мне информацию, я буду ссылаться на них в верхней части файла
мой проект можно найти здесь:https://sourceforge.net/projects/pyworkbooks/ и я призываю вас проверить это из.
4 ответов
на самом деле, чтобы acess OpenOffice или LibreOffice через Python, нужно пройти через абсолютно непрозрачное количество котельной плиты, унаследованной от StarOffice times - никогда должным образом не документированной (чувствуется) или упрощенной с тех пор.
С другой стороны, он просто работал с последней версией LibreOffice-3.3-I am уверен, что он работает и для OpenOffice (но я бы не советовал никому придерживаться OpenOffice, это тупиковый Оракул на данный момент)
в примере ниже используется медленный метод подключения к запущенному экземпляру LibreOffice из "извне". Это очень медленно - вам придется обратиться к документации о том, как заставить его работать как макрос из "внутри" программы, для лучшей производительности. (это действительно медленно таким образом).
однако, это метод позволяет исследовать методы, доступные разработчикам с помощью терминала Python и интроспекции.
первая плохо документированная часть заключается в том, что вы должны начать Open/LibreOffice с:
soffice "-accept=socket,host=0,port=2002;urp;"
Для соединений, котор нужно принять. Затем создайте новую электронную таблицу через ее интерфейс
и с интерпретатором python, который поставляется с офисным пакетом, запустите следующий код
(интерактивно или как скрипт):
import uno
import socket # only needed on win32-OOo3.0.0
# get the uno component context from the PyUNO runtime
localContext = uno.getComponentContext()
# create the UnoUrlResolver
resolver = localContext.ServiceManager.createInstanceWithContext(
"com.sun.star.bridge.UnoUrlResolver", localContext )
# connect to the running office
ctx = resolver.resolve( "uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext" )
smgr = ctx.ServiceManager
# get the central desktop object
desktop = smgr.createInstanceWithContext( "com.sun.star.frame.Desktop",ctx)
# access the current writer document
model = desktop.getCurrentComponent()
try:
sheets = model.getSheets()
except Exception:
raise TypeError("Model retrived was not a spreadsheet")
sheet1 = getattr(sheets, sheets.ElementNames[0])
# At this point, you can use "dir" to check the methods and
# attributes available for the sheet
# the methots "getCellByPosition, to retrieve a cell object,
# which has "getFormula" and "setFormula"
# methods.
for i in xrange(10):
for j in xrange(10):
cell = sheet1.getCellByPosition(i, j)
cell.setFormula(str(i * j))
c1 = sheet1.getCellByPosition(1,1)
Как вы можете видеть, соединительные части это шаблон, который я получил где-то еще много лет назад, и я сомневаюсь, что любой живой человек мог бы найти какое-либо обоснование в таком материале. Однако, как только вы перейдете к объекту "листы", атрибуты и методы объекта начнут иметь смысл.
существует полное руководство разработчика онлайн, что даже может позволить понять часть подключения:
http://wiki.services.openoffice.org/wiki/Documentation/DevGuide/OpenOffice.org_Developers_Guide
МЕЖПРОЦЕССНЫЙ API для подключения к LibreOffice (а также OpenOffice и StarOffice) называется UNO. Это задокументировано в документация по API LibreOffice сайт.
Как говорит jsbueno, он ожидает, что демон работает для связи. Аргументы командной строки для команды "soffice", запускающей демон, определяют, какие значения хоста и порта необходимо предоставить в вызовах UNO.
вы также можете попробовать ezodf Это была лучшая библиотека python odf, которую я нашел
можно использовать pyoo. Вот мой ответ на подобный вопрос https://stackoverflow.com/a/27082610/886607