LoginSignup
7
12

More than 5 years have passed since last update.

Python で、LibreOffice アプリを使う(2)calc を操作する(マクロと外部から)

Last updated at Posted at 2015-11-15

まずは、calc を操作してみます。

操作は単純で、A1 のセルに数字をだすだけです。windows で試しています。

準備としては、まずは、新規calc を立ち上げます。

マクロ

自作マクロのところに、下記を書いたpython スクリプトをいれてください。

def a1():
  doc = XSCRIPTCONTEXT.getDocument()
  sheet = doc.getSheets().getByName('Sheet1')
  A1 = sheet.getCellRangeByName('A1')
  A1.Value = 100

ツール→マクロ→マクロの管理→python→該当スクリプト→a1 を実行します。A1に、
100 が入ります。

外部から操作する

マクロだとデバッグが大変なので、外部から、python のスクリプトをつかって操作できるようにします。今のところ、windows では、事実上、LibreOffice 付属のpythonしかつかえません。Mac ,Ubuntu でも状況は同じらしいです。つまり、自由にモジュールを追加できないので、かなり不便だということです。

(準備)
- python は、LibreOffice 付属を使う(他のpython とは競合しないようにする)
- path を、LibreOffice の python に通す。
- libreoffice を 操作可能な状態で起動(次に説明)する

(起動)
下記のようにオプションつけて、バッチコマンド(名前は自由につけてください)で起動します。2行になっているので注意。DOS窓は開きっぱなしです。サービスにしたほうがいいのですが、とりあえずは、これでいきます。起動したら、一度シートをクリックします。 原因不明ですが、一度クリックしないと動きません。

"C:\Program Files (x86)\LibreOffice 5\program\soffice.exe" ^
--calc --norestore --accept=socket,host=localhost,port=8100;urp

マクロと同じことをするのが下記です。libreoffice 付属なので、uno は import
できるはずです。 新規のcalcが開いているのが前提です。 access the current document 以下が、マクロと同じ内容になります。それ以前は、意味がまだ、よくわからない部分ありです。
python スクリプト名(名前は自由にどうぞ) で実行します。

# -*- coding: utf-8 -*-
import uno
localContext = uno.getComponentContext()
resolver = localContext.ServiceManager.createInstanceWithContext(
    "com.sun.star.bridge.UnoUrlResolver", localContext)
#connect to the running office
ctx = resolver.resolve( "uno:socket,host=localhost,port=8100;urp;StarOffice.ComponentContext" )
smgr = ctx.ServiceManager
# get the central desktop object
desktop = smgr.createInstanceWithContext( "com.sun.star.frame.Desktop",ctx)

# access the current  document ( calc )
doc = desktop.getCurrentComponent()
sheet = doc.getSheets().getByName('Sheet1')
A1 = sheet.getCellRangeByName('A1')
A1.Value = 999

マクロと外部が同じことができるようになったので、開発はマクロだけよりはましになりました。外部といっても、libreoffice 付属をつかわないといけないので(現時点ではですが)、pip や、ipython が使えず不便です。

7
12
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
12