OpenOffice.orgのマクロをPythonで記述して動かす(Calc上でマクロが動作しているかのチェックと全シートのオブジェクトの取得に関するメモ)
「OpenOffice.orgのマクロをPythonで記述して動かす(概要,ファイル配置,ダイアログの表示)」の続きとして、ここでは、Python-UNOを用いてOpenOffice.org Calc上でマクロが実行されているかどうかのチェックとOpenOffice.org Calcの全てのシートのデータを保持するオブジェクトの取得に関してを扱う。
メモの続きとコード例は別記事で扱う。
Calc上でマクロが実行されているかどうかのチェック
「XSCRIPTCONTEXT.getDocument()」で得たドキュメントオブジェクトのメンバ関数supportsService()に「com.sun.star.sheet.SpreadsheetDocument」を指定するとOpenOffice.org Calc内でマクロが実行された場合にTrue、そうでない場合にFalseが返る。
OpenOffice.orgのマクロはドキュメントを開いていないとき(「ようこそ」の画面)や他のWriterなどのアプリケーションが動作しているときにも実行でき
そうした場合にOpenOffice.org Calc固有の処理を実行しようとするとエラーになるが、最初の段階でこれをチェックしておくとうまく処理できる。
(2010/4/8)下の流れを改善したものを「OpenOffice.orgのマクロをPythonで記述して動かす(Calc上でマクロが動作しているかのチェックを改善)」に貼り付けた。
class Bridge(object): def __init__(self): self._desktop = XSCRIPTCONTEXT.getDesktop() self._document = XSCRIPTCONTEXT.getDocument() ... class OOoCalc(Bridge): def __init__(self): Bridge.__init__(self) # 必須 # Calcの中から実行されたならTrue,それ以外ならFalse # http://api.openoffice.org/docs/common/ref/com/sun/star/lang/XServiceInfo.html self.__supported = self._document.supportsService('com.sun.star.sheet.SpreadsheetDocument') if self.__supported: # Calc内で実行されたときの処理をここに記述 @property def supported(self): return self.__supported def macroname(): calc = OOoCalc() # Calcの中かどうかをチェックする if not calc.supported: # ここにエラーダイアログを表示する処理を記述 return else: # ここにCalcを用いたマクロのメイン処理を記述
全シートのオブジェクトを取得
全てのシートは先述のドキュメントオブジェクトのプロパティSheetsかメンバ関数getSheets()で取得できる。
class OOoCalc(Bridge): def __init__(self): Bridge.__init__(self) # (Calc上でマクロが実行されたかを先にここでチェックしておく) # # Calcのシート一覧 # http://api.openoffice.org/docs/common/ref/com/sun/star/sheet/XSpreadsheetDocument.html self.__sheets = self._document.Sheets @property def sheets(self): return self.__sheets
(2010/4/8)記述を微調整
シートに関する操作はこのオブジェクトを通して行う。
(「OpenOffice.orgのマクロをPythonで記述して動かす(Calcのシート追加に関するメモとシート追加のコード例)」に続く)
関連記事:
- OpenOffice.orgのマクロをPythonで記述して動かす(概要,ファイル配置,ダイアログの表示)
- OpenOffice.orgのマクロをPythonで記述して動かす(Calcのシート追加に関するメモとシート追加のコード例)
- OpenOffice.orgのマクロをPythonで記述して動かす(Calc上でマクロが動作しているかのチェックを改善)
- OpenOffice.orgのマクロをPythonで記述して動かす(Calcのアクティブもしくは任意のシートとセルのオブジェクトの取得)
- OpenOffice.orgのマクロをPythonで記述して動かす(Calcのセル内容へのアクセスについてとセル内容の操作に関する例)
参考URL:
- http://hermione.s41.xrea.com/pukiwiki/pukiwiki.php?OOoBasic%2FCalc%2Fsheet - OOoBasicを用いた解説・要領は同じ
使用したバージョン:
- OpenOffice.org(Go-oo) 3.1.1
- Python 2.6.4