Ubuntu의 Python3에서 LibreOffice 작업

실행 환경
Ubuntu Stdio 17.10
Python 3.6.3
LibreOffice 6.0
Ubuntu의 Python에서 Calc 사용
https://qiita.com/ty21ky/items/b31cecf25108f15940be
그러면 Ubuntu Python3에서 실행할 때 오류가 자주 발생합니다. pyoocalc.py의 출처를 봐도 제 수준에서는 이해할 수 없어서 인터넷에서 Libre Office의 시작 방법을 찾고 더 간단하고 설치하지 않아도 되는 방법을 찾았습니다.
2개월 전에도 봤는데 그때 뭘 썼는지 이해가 안 돼서 이번에 제가 하고 싶은 걸 봤어요.
설치도 아무 것도 필요 없어요.다만 UNO가 Ubuntu의 Python3를 사용할 수 있도록 경로를 통과합니다.
나는 Python에서 경로를 통과했지만 환경 변수를 넣을 수 있다고 생각했다.자세한 내용은 아래의 홈페이지를 보십시오.
이번에는 통신 상태에서 Libre Office를 시작한 후 Python을 실행하지만 Python에서 시작할 수도 있습니다.
graph1.ods 만들기
아래 그림을 참고하여 만들고 저장하고 닫습니다.
통신 상태에서 LibreOffice 시작
환경에 따라 경로를 변경하십시오.
$ /opt/libreoffice6.0/program/soffice "-accept=socket,host=localhost,port=2002;urp;StarOffice.ServiceManager"
graph1A.py
#!/usr/bin/python3
# -*- coding: utf-8 -*-

#UNOのパスを通す
import sys
sys.path.append('/opt/libreoffice6.0/program')

import uno
import unohelper
import os.path
import traceback

import matplotlib.pyplot as plt
import numpy as np

def connect():
    try:
        localctx = uno.getComponentContext()
        resolver = localctx.ServiceManager.createInstanceWithContext(
            "com.sun.star.bridge.UnoUrlResolver",localctx)
        ctx = resolver.resolve(
            "uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext")
    except:
        return None
    return ctx


if __name__=="__main__":
    ctx = connect()
    if ctx == None:
        print ("Failed to connect.")
        #import sys
        sys.exit()

    try:
        ofile= os.path.abspath('/home/・・・・/graph1.ods')
        oURL = unohelper.systemPathToFileUrl(ofile)

        smgr = ctx.ServiceManager
        desktop = smgr.createInstanceWithContext("com.sun.star.frame.Desktop",ctx)
        doc = desktop.loadComponentFromURL( oURL,"_blank", 0, () )
    except:
        pass

    Sheet = doc.getSheets().getByIndex(0) 
    B2=Sheet.getCellRangeByName('B2').Value
    C2=Sheet.getCellRangeByName('C2').Value
    D2=Sheet.getCellRangeByName('D2').Value
    E2=Sheet.getCellRangeByName('E2').Value
    F2=Sheet.getCellRangeByName('F2').Value
    G2=Sheet.getCellRangeByName('G2').Value
    H2=Sheet.getCellRangeByName('H2').Value

    B3=Sheet.getCellRangeByName('B3').Value
    C3=Sheet.getCellRangeByName('C3').Value
    D3=Sheet.getCellRangeByName('D3').Value
    E3=Sheet.getCellRangeByName('E3').Value
    F3=Sheet.getCellRangeByName('F3').Value
    G3=Sheet.getCellRangeByName('G3').Value
    H3=Sheet.getCellRangeByName('H3').Value

    #xdata = [1880, 1900, 1920, 1940, 1960, 1980, 2000]
    xdata = [B2, C2, D2, E2, F2, G2, H2]

    #          年: 横軸の値

    #ydata = [959596, 2014100, 3699428, 7354971, 9683802, 11618281, 12064101]
    ydata = [B3, C3, D3, E3, F3, G3, H3]

    #          人口: 縦軸の値

    plt.plot(xdata, ydata, color = '#007700', linestyle = 'solid', linewidth = 3)

    #     折れ線の描画:  'k-' 黒実線

    plt.title('Transition of Population (Tokyo)\n', fontsize = 15)

    #       グラフのタイトルとフォントサイズ

    plt.xlabel('Year')

    #     横軸のタイトル

    plt.ylabel('Population')

    #     縦軸のタイトル

    plt.show()

#    グラフの表示

통신 상태에서 LibreOffice를 시작한 후 graph1A.py를 실행합니다.
$ ./graph1A.py

접선도 부분의 코드는 아래 HP의 샘플을 직접 사용했다.
참고 자료
OOoPython/Automation
http://hermione.s41.xrea.com/pukiwiki/pukiwiki.php?OOoPython%2FAutomation
접선도
http://y-okamoto-psy1949.la.coocan.jp/Python/sampleprgs/DrawGraphs/LineChart/

좋은 웹페이지 즐겨찾기