2015-12-25 2 views
3

Я собрал данные пользователя, используя WX питон гуй и чем я Uno, чтобы заполнить эти данные в OpenOffice документ под Ubuntu 10.xxпитона + WX и уно заполнить LibreOffice с помощью Ubuntu 14,04

пользователя + мой-скрипт (+ пустой документ) -> заполненный документ

После обновления до ubuntu 14.04 uno больше не работает с python 2.7, и теперь у нас есть libreoffice вместо openoffice в ubuntu. когда я пытаюсь запустить свой код python2.7, он говорит:

ImportError: No module named uno 

Как я могу вернуть его на работу?

, что я пробовал: установлен https://pypi.python.org/pypi/unotools v0.3.3 Sudo APT-получить установку LibreOffice-скрипт-провайдер питона

преобразовал код Python3 и получил уо ввоз, но WX не ввоз в Python3: -/

ImportError: No module named 'wx' 

гугл и читать python3 работает только с WX фениксом

так пытался установить: http://wxpython.org/Phoenix/snapshot-builds/ но WASN» t, чтобы заставить его работать с python3

есть ли способ получить uno мост для работы с py2.7 под ubuntu 14.04? Или как получить wx для запуска с py3? что еще я мог попробовать?

ответ

0

В идеале я бы сказал, что использовать python 3, потому что python 2 устаревает. Коммутатор требует совсем немного новых изменений в кодировке, но лучше раньше, чем позже. Поэтому я пробовал:

sudo pip3 install -U --pre \ 
    -f http://wxpython.org/Phoenix/snapshot-builds/ \ 
    wxPython_Phoenix 

Однако это дало мне ошибки, и я не хотел проводить следующие пару дней, работая через них. Вероятно, предварительные версии еще не готовы к прайм-тайм.

Поэтому вместо этого я рекомендую переключиться на AOO на данный момент. Для получения информации см. https://stackoverflow.com/a/27980255/5100564. У AOO нет всех последних функций, которые есть у LO, но это хороший надежный продукт Office.

По-видимому, также можно восстановить LibreOffice с питоном 2, используя этот скрипт: https://gist.github.com/hbrunn/6f4a007a6ff7f75c0f8b

+0

Я попытался установить pip3 в соответствии с этой инструкцией: [ссылка] http://askubuntu.com/questions/412178/how-to-install-pip-for-python-3-in-ubuntu-12-04- LTS [/ ссылка] после этого я попробовал вашу команду PIP3 и получил эту ошибку: /USR/бен/python3 -u build.py построить – PyUsr

+0

закончил с этой ошибкой: Command «/ USR/бен/python3 - u build.py build 'не удалось с кодом выхода 1. ------------------------------------ - Очистка ... Команда/usr/bin/python3 -c "import setuptools, tokenize; __ файл __ = '/ tmp/pip_build_root/wxPython-Phoenix/setup.py'; exec (компиляция (getattr (tokenize, ' открыть ', открыть) (__file __). read(). replace ('\ r \ n', '\ n'), __file__, 'exec')) "install --record /tmp/pip-apne5cii-record/install-record.txt - -single-version-external-managed -compile не удалось с кодом ошибки 1 в/tmp/pip_build_root/wxPython-Phoenix Сохранение журнала отладки для сбоя в /home/moddi/.pip/pip.log – PyUsr

+0

import wx ... still и я не понимаю, почему AOO был лучше ??? Моя проблема в том, что у меня нет дистрибутива python, который импортирует uno и wx. Я не возражаю, чтобы обновить код до более нового python ... просто хочу, чтобы комбинация libs выполняла работу. – PyUsr

1

Создать питона макроса в LibreOffice, который будет выполнять работу по вставке данных в LibreOffice, а затем в вашем питона 2,7 код envoke макро.
Поскольку макрос работает с LibreOffice, он будет использовать python3. Вот пример того, как envoke в LibreOffice макрос из командной строки:

#!/usr/bin/python3 
# -*- coding: utf-8 -*- 
## 
# a python script to run a libreoffice python macro externally 
# NOTE: for this to run start libreoffice in the following manner 
# soffice "--accept=socket,host=127.0.0.1,port=2002,tcpNoDelay=1;urp;" --writer --norestore 
# OR 
# nohup soffice "--accept=socket,host=127.0.0.1,port=2002,tcpNoDelay=1;urp;" --writer --norestore & 
# 
import uno 
from com.sun.star.connection import NoConnectException 
from com.sun.star.uno import RuntimeException 
from com.sun.star.uno import Exception 
from com.sun.star.lang import IllegalArgumentException 
def uno_directmacro(*args): 
    localContext = uno.getComponentContext() 
    localsmgr = localContext.ServiceManager 
    resolver = localsmgr.createInstanceWithContext("com.sun.star.bridge.UnoUrlResolver", localContext) 
    try: 
     ctx = resolver.resolve("uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext") 
    except NoConnectException as e: 
     print ("LibreOffice is not running or not listening on the port given - ("+e.Message+")") 
     return 
    msp = ctx.getValueByName("/singletons/com.sun.star.script.provider.theMasterScriptProviderFactory") 
    sp = msp.createScriptProvider("") 
    scriptx = sp.getScript('vnd.sun.star.script:directmacro.py$directmacro?language=Python&location=user') 
    try: 
     scriptx.invoke((),(),()) 
    except IllegalArgumentException as e: 
     print ("The command given is invalid ("+ e.Message+ ")") 
     return 
    except RuntimeException as e: 
     print("An unknown error occurred: " + e.Message) 
     return 
    except Exception as e: 
     print ("Script error ("+ e.Message+ ")") 
     print(e) 
     return 
    return(None) 

uno_directmacro() 

И это соответствующий код макроса в LibreOffice под названием «directmacro.py» и хранится в User области для LibreOffice макросов (которые обычно составляет $ HOME/.config/LibreOffice/4/пользователь/Scripts/питон:

#!/usr/bin/python 
from com.sun.star.awt.MessageBoxButtons import BUTTONS_OK, BUTTONS_OK_CANCEL, BUTTONS_YES_NO, BUTTONS_YES_NO_CANCEL, BUTTONS_RETRY_CANCEL, BUTTONS_ABORT_IGNORE_RETRY 
from com.sun.star.awt.MessageBoxButtons import DEFAULT_BUTTON_OK, DEFAULT_BUTTON_CANCEL, DEFAULT_BUTTON_RETRY, DEFAULT_BUTTON_YES, DEFAULT_BUTTON_NO, DEFAULT_BUTTON_IGNORE 
from com.sun.star.awt.MessageBoxType import MESSAGEBOX, INFOBOX, WARNINGBOX, ERRORBOX, QUERYBOX 
def directmacro(*args): 
    import socket, time 
    class FontSlant(): 
     from com.sun.star.awt.FontSlant import (NONE, ITALIC,) 
#get the doc from the scripting context which is made available to all scripts 
    desktop = XSCRIPTCONTEXT.getDesktop() 
    model = desktop.getCurrentComponent() 
    text = model.Text 
    tRange = text.End 
    cursor = desktop.getCurrentComponent().getCurrentController().getViewCursor() 
    doc = XSCRIPTCONTEXT.getDocument() 
    parentwindow = doc.CurrentController.Frame.ContainerWindow 

# your cannot insert simple text and text into a table with the same method 
# so we have to know if we are in a table or not. 
# oTable and oCurCell will be null if we are not in a table 
    oTable = cursor.TextTable 
    oCurCell = cursor.Cell 
    insert_text = "This is text inserted into a LibreOffice Document\ndirectly from a macro called externally" 
    Text_Italic = FontSlant.ITALIC 
    Text_None = FontSlant.NONE 
    cursor.CharPosture=Text_Italic 
    if oCurCell == None: # Are we inserting into a table or not? 
     text.insertString(cursor, insert_text, 0) 
    else: 
     cell = oTable.getCellByName(oCurCell.CellName) 
     cell.insertString(cursor, insert_text, False) 
    cursor.CharPosture=Text_None 
    return None 

Вы, конечно, необходимо адаптировать код либо принять данные в качестве аргументов, прочитать из файла или любой другой.

Смежные вопросы