LibreOffice Calcで為替レートを取得する。その3

LibreOffice Calcで"Hello, World!"する続きです。

"LibreOffice Calc Python tutorial" でググってみると、Python Guide - My First Macroというページが見つかりました。ここにCalcでPythonを使う最初の一歩が書いてあります。

import uno

def my_first_macro_calc():
    doc = XSCRIPTCONTEXT.getDocument()
    cell = doc.Sheets[0]['A1']
    cell.setString('Hello World in Python in Calc')
    return

そのページにあるWriter用のプログラムと比べてみると、uno モジュールを import して doc オブジェクトを作るところまでは一緒ですね。
違いは6行目からで、doc オブジェクトの getText()を呼ぶとWriter、Sheetsを参照するとCalcになるんでしょうか。

Calcの6行目では "Sheets" オブジェクトの "[0]" で参照されるシートの "A1" セルをcellオブジェクトとして作成し、そこに7行目で setString() を用いて文字列を入力しているようです。

ということは…あれ、もうできちゃいましたか?


これを保存すると、先ほどのマクロマネージャーに "HelloWorld" が登録されました。


ここでこの "HelloWorld" を実行すると、A1セルに文字列が入りました。おめでとう。

ひとつ注意しなくてはいけないのは、ここで登録されたように見えてこのPythonプログラム(マクロ)はテンポラリディレクトリに保存されているという点です。つまり、この 無題1 ドキュメントを閉じてしまうとその時点で消えてしまいます。
マクロはCalcのファイル内に保存されるため、無題1 を保存すればマクロも一緒に保存されます。が、次にそのファイルを開くと、「セキュリティ上の理由からマクロは実行できません」というメッセージが出ます。



…むむぅ。これでは意味がありません。でも、セキュリティ上やむを得ない部分もあるのは理解できます。

かつてMicrosoft Office上で動作するマクロウィルス "Melissa"(Wordマクロ)とか "laroux"(Excelマクロ)が世界を恐怖のズンドコに突き落とした事例がありました。そのため、基本的にマクロの実行機能はデフォルトでは禁止という形になっているわけです。

ではどうすればいいか、ですが…。

方法の1つは、LibreOffice Calcで為替レートを取得する。その2で設定したマクロセキュリティ設定を「中」にすることです。


ここを読むと、「中」の場合にはマクロの実行前に確認が求められるとあります。これを選択することで、マクロ実行時に確認は求められるものの、実行できるようになります。具体的には、ファイルを開いたときに「マクロがあるけどどうしますか?」と訊かれて「マクロの有効化」か「マクロの無効化」を選択します。マクロを有効化すれば、Pythonマクロは実行できるようになります。

一方「高」の場合には「署名のないマクロは無効になります。」とあります。逆に言えば、ファイルに署名がしてあれば実行できるということでしょう。
ともあれ、一旦はマクロセキュリティレベルを「中」にすればPythonマクロは実行できることがわかりました。

0 件のコメント:

コメントを投稿

WesternDigitalこわれた。

たぶん寿命を過ぎてるのでクレームとまではいかないのだけれど。 WesternDigitalのWD60EFRXが壊れました。モノは2014年11月に購入。ところが3年で壊れ、RMAにより2017年11月に交換したものです。BlackBlazeでも故障率がそれなりに高かったので、そう...