2010年2月1日月曜日

OpenOffice.org と Python マクロ 3 限目

今回は、OpenOffice.org Calc をターゲットにしてみる。

以下のソースコードを helloCald.py として保存する。

#!
# -*- coding: utf_8 -*-

import uno
from com.sun.star.beans import PropertyValue

def helloCalc():
    uri = "private:factory/scalc"
    p = PropertyValue()
    p.Name = "Hidden"
    p.Value = True
    properties = (p,)
    desktop = XSCRIPTCONTEXT.getDesktop()
    calc = desktop.loadComponentFromURL(uri, "_blank", 0, properties)

    sheets = calc.getSheets()
    sheet = sheets.getByIndex(0)
    sheet.setName("helloSheet")

    cell = sheet.getCellByPosition(1, 2)
    cell.setString("The Price")
    cell2 = sheet.getCellByPosition(1, 3)
    cell2.setValue(99.95)

    p = PropertyValue()
    p.Name = 'Overwrite'
    p.Value = True
    properties = (p,)
    calc.storeAsURL("file:///f:/helloCalc.ods", properties)
    calc.dispose()
   
def message(msg = "", title = ""):
    desktop = XSCRIPTCONTEXT.getDesktop()
    frame = desktop.getCurrentFrame()
    win = frame.getContainerWindow()
    toolkit = win.getToolkit()
    rect = uno.createUnoStruct("com.sun.star.awt.Rectangle")
    msgbox = toolkit.createMessageBox(win, rect, "messbox", 1, title, msg)
    msgbox.execute()

g_exportedScripts = helloCalc,


 実行すると、F ドライブの直下に helloCalc.ods ファイルが作成される。
うちの環境だと、C ドライブに保存しようとすると。

com.sun.star.uno.Exception (Error during invoking function helloCalc in module file:///C:/Users/shadow/AppData/Roaming/OpenOffice.org/3/user/Scripts/python/helloCalc.py (:
  C:\Users\shadow\AppData\Roaming\OpenOffice.org\3\user\Scripts\python\helloCalc.py:29 in function helloCalc() [calc.storeAsURL("file:///c:/helloCalc.ods", properties)]
  C:\Program Files (x86)\OpenOffice.org 3\Basis\program\pythonscript.py:773 in function invoke() [ret = self.func( *args )]
))


というようなエラーが発生する。
他に D, E ドライブで試したが、問題ない。なぜ C ドライブだけだめなのだろうか?
さっぱどわがんねぇ