Ошибка интерфейса IAC-протокола на python 3

Я хотел бы работать с листами Excel (.xls, вероятно, для преобразования .ods) через python, сохраняя при этом все исходное содержимое листа. В отличие от xlutils (http://www.python-excel.org/) iac-протокол (http://pythonhosted.org/iac-protocol/index.html) кажется мне более подходящим/элегантным инструментом для поддержания стиля листа, формул, дропбоксов и т. д. Один из шагов для запуска сервера или интерпретатора iac (iacs/iaci) необходимо инициализировать интерфейс, который состоит, среди прочего, из этой команды:

импортировать iac.app.libreoffice.calc как localc

Хотя импорт iac.app.libreoffice работает нормально

переход на уровень calc импорт iac.app.libreoffice.calc выдает следующую ошибку

import iac.app.libreoffice.calc Traceback (последний последний вызов): файл "", строка 1, в файле "/usr/lib/python3.4/site-packages/iac/app/libreoffice/calc.py", строка 11, в from uno import getComponentContext ImportError: невозможно импортировать имя 'getComponentContext'

Из того, что я узнал на этом форуме, это может быть связано с дублированием имени метода между двумя модулями. Вот где я застрял. Как узнать, какой еще модуль имеет такое имя метода и как это исправить? И iac-protocol, и unotools — это модули, загружаемые через pip3. Я не создавал метод с таким именем ни в одном скрипте.

Заранее спасибо за любой совет!

Python3.4 в Scientific Linux версии 7.3 (азот) LibreOffice 5.0.6.2 00(Build:2)


person Jan Vilimovsky    schedule 01.09.2017    source источник


Ответы (1)


Несколько вопросов, чтобы сузить проблему:

  • Вы сначала начали прослушивание libreoffice на сокете?

  • Вы импортировали что-нибудь еще до import iac.app.libreoffice.calc?

  • Что происходит, когда вы запускаете python в терминале и вводите from uno import getComponentContext?

Я установил протокол iac на Linux Mint и смог import iac.app.libreoffice.calc использовать его. Процесс установки был сложным, поэтому я не удивлюсь, если возникнут проблемы с установкой ваших пакетов или, возможно, он не работает в системах на основе RHEL. Во-первых, мне потребовалось установить gnumeric.

Код Calc «Hello World», который работал у меня, выглядит следующим образом.

libreoffice "--accept=socket,host=localhost,port=18100;urp;StarOffice.ServiceManager" --norestore --nofirststartwizard --nologo --calc &
python3
>>> import iac.app.libreoffice.calc as localc
>>> doc = localc.Interface.current_document()
>>> sheet = doc.getSheets().getByIndex(0)
>>> cell = sheet.getCellByPosition(0,0)
>>> cell.setString("Hello, World!")

Еще одна мысль: вы рассматривали возможность использования PyUNO, начиная с import uno, вместо библиотеки-оболочки? Это позволит избежать зависимости от некоторых дополнительных библиотек, которые могут вызывать проблему. Также есть улучшенная документация для прямого PyUNO.

person Jim K    schedule 01.09.2017
comment
Я начал мост UNO в первую очередь. В ответ появился лист Calc. До команды import iac.app.libreoffice.calc я без проблем импортировал только uno и iac (а также iac.app и т. д.). Мне повезло найти библиотеку libreoffice-pyuno, но метод getComponentContext все еще отсутствует. Я нашел библиотеку goffice, но пока мне не повезло найти подходящий репозиторий для gnumeric для RHEL 7. Должен быть частью EPEL (или EPEL-test), но я не могу его найти. - person Jan Vilimovsky; 13.09.2017