情報の少ない Python でのサンプルプログラム。
HelloWorld
最初の Item に "Hello World"
import uno
def HelloWorldPythonItem0():
oDoc = XSCRIPTCONTEXT.getDocument()
oSlideList =oDoc.getDrawPages()
oSlide=oSlideList.getByIndex(0)
oItem=oSlide.getByIndex(0)
oItem.String="HelloWorld"
return None
Drawでの挙動
表計算に数値を入力
「LibreOffice マクロを Ubuntu + Python で作る」
https://qiita.com/nanbuwks/items/77d5707b9a2507972676
で書いた、"Hello World via Python" を Calc に表示するプログラムを、別のやりかたで書き換え。
今度はシートやセルの参照方法を変更、文字列の代わりに数値をセルに入力しています。
import uno
def HelloWorldPythonCalc():
oDoc = XSCRIPTCONTEXT.getDocument()
oSheet = oDoc.CurrentController.getActiveSheet()
oCell = sheet.getCellRangeByName('A1')
oCell.Value = '12345'
return None
エクスポート
pdf にエクスポート
import uno
from com.sun.star.beans import PropertyValue
def make_pdf():
properties=[]
p=PropertyValue()
p.Name='FilterName'
p.Value='calc_pdf_Export'
properties.append(p)
oDoc = XSCRIPTCONTEXT.getDocument()
oDoc.storeToURL('file:///tmp/test.pdf',tuple(properties))
return True
calc_pdf_Export としていますが、表計算以外でも問題なく pdf になるようです。
選択範囲を png でエクスポート
import uno
from com.sun.star.beans import PropertyValue
def make_png():
properties=[]
p=PropertyValue()
p.Name='FilterName'
p.Value='calc_png_Export'
properties.append(p)
p2=PropertyValue()
p2.Name='SelectionOnly'
p2.Value=True
properties.append(p2)
oDoc = XSCRIPTCONTEXT.getDocument()
oDoc.storeToURL('file:///tmp/test.png',tuple(properties))
return True
calc_png_Export としていますが、表計算以外でも問題なく png になるようです。
impress
1ページ目を6カラムレイアウトに変更します。
def LayoutChangeCurrentPageTo6ContentImpress():
oDoc = XSCRIPTCONTEXT.getDocument()
oSlideList =oDoc.getDrawPages()
oSlide=oSlideList.getByIndex(0)
oSlide.Layout=34
return None
選択したオブジェクトを新しいDrawファイルにコピーして、/tmp/pngsource.odf として保存する
import uno
CTX = uno.getComponentContext()
SM = CTX.getServiceManager()
def call_dispatch(doc, url, args=()):
frame = doc.getCurrentController().getFrame()
dispatch = create_instance('com.sun.star.frame.DispatchHelper')
dispatch.executeDispatch(frame, url, '', 0, args)
return
def create_instance(name, with_context=False):
if with_context:
instance = SM.createInstanceWithContext(name, CTX)
else:
instance = SM.createInstance(name)
return instance
def copySelectedToNewDraw():
# copy from current draw file
docsource = XSCRIPTCONTEXT.getDocument()
call_dispatch(docsource, '.uno:Copy')
# paste to new draw file
desktop = create_instance('com.sun.star.frame.Desktop', True)
path = 'private:factory/sdraw'
docdist = desktop.loadComponentFromURL(path, '_default', 0, ())
call_dispatch(docdist, '.uno:Paste')
# save new draw file to /tmp
docdist.storeAsURL(convertToURL( "/tmp/pngsource.odg"),())
docdist.dispose
# https://wiki.openoffice.org/wiki/Danny.OOo.OOoLib.py (LGPL License)
#------------------------------------------------------------
# General Utility functions
#------------------------------------------------------------
def convertToURL( cPathname ):
"""Convert a Windows or Linux pathname into an OOo URL."""
if len( cPathname ) > 1:
if cPathname[1:2] == ":":
cPathname = "/" + cPathname[0] + "|" + cPathname[2:]
cPathname = cPathname.replace( "\\", "/" )
cPathname = "file://" + cPathname
return cPathname