PythonからLibreOfficeのCalcを操作するテストをしました。
Calcというのは、MicrosoftOfficeでいうExcel相当のものです。
環境: LibreOffice ver 6.1.5.2 / Raspberry Pi
参考:
https://qiita.com/ty21ky/items/87c94fbc63ed9c1ee96a
https://qiita.com/ty21ky/items/d489da25f7824b768abf
これの面白いところは、VBAのような言語で直接Cellの操作をしているのではなく、下記のとおりソケット通信でデータを送受信できるところです。
libreoffice –calc –norestore –accept=socket,host=localhost,port=2002′;’urp;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# -*- coding: utf-8 -*- import uno import unohelper import os.path import time ofile= os.path.abspath('/home/pi/ooo.ods') oURL = unohelper.systemPathToFileUrl(ofile) localContext = uno.getComponentContext() resolver = localContext.ServiceManager.createInstanceWithContext("com.sun.star.bridge.UnoUrlResolver", localContext ) ctx = resolver.resolve( "uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext" ) smgr = ctx.ServiceManager desktop = smgr.createInstanceWithContext( "com.sun.star.frame.Desktop",ctx) oDoc = desktop.loadComponentFromURL(oURL,"_blank", 0, () ) oSheet = oDoc.getSheets().getByIndex(0) oSheet.getCellByPosition(1,0).Formula = "=A1*100" for i in range(10): time.sleep(1) oSheet.getCellByPosition(0,i).Formula = "=RAND()" time.sleep(1) print(oSheet.getCellByPosition(0,1).Value) |
セルA1からA10の値をチャート表示するようにしたファイルooo.odsをあらかじめ用意しておいて、そこにPythonから値を入れるとリアルタイムでチャートが変化します。(これがやりたかった! Excelでもこれだけ手軽にできるといいのですが)
しかしこのブログは久しぶりの投稿となりました。他にブログを増やしたせいもありますが、ちょっと油断するとすぐに間があいてしまいますね。(5ヶ月くらいか)
時がすぎるのははやい・・