Difference between revisions of "PyUNO samples"
(fix the tagging) |
(Insert introduction to each script.) |
||
Line 1: | Line 1: | ||
− | <code>[python]# HelloWorld python script for the scripting framework | + | OpenOffice.org comes with a set of scripts that work as a sample on how to programmatically generate certain tasks using PyUNO. |
+ | |||
+ | === Hello World.py === | ||
+ | This script print a Hello World in an Writer document. This uses the XText interface, the actual content is on the String value of the XTextRange. | ||
+ | <code>[python] | ||
+ | # HelloWorld python script for the scripting framework | ||
def HelloWorldPython( ): | def HelloWorldPython( ): | ||
Line 14: | Line 19: | ||
</code> | </code> | ||
− | <code>[python]# helper function | + | === Capitalize.py === |
+ | This script will show how to modify existing content in a document. More specifically manipulate the format values from the text. We use common python commands like isupper, len and lower. And we use XSCRIPTCONTEXT for the localization of the text (XText), the control of the cursor (xWordCursor) and xSelectionSupplier in order to select the content. | ||
+ | |||
+ | <code>[python] | ||
+ | # helper function | ||
def getNewString( theString ) : | def getNewString( theString ) : | ||
if( not theString or len(theString) ==0) : | if( not theString or len(theString) ==0) : | ||
Line 71: | Line 80: | ||
− | # lists the scripts, that shall be visible inside OOo. Can be | + | # lists the scripts, that shall be visible inside OOo. Can be omitted, if |
# all functions shall be visible, however here getNewString shall be surpressed | # all functions shall be visible, however here getNewString shall be surpressed | ||
g_exportedScripts = capitalisePython, | g_exportedScripts = capitalisePython, | ||
</code> | </code> | ||
− | <code>[python]import uno | + | === TableSample.py === |
+ | |||
+ | On this script we abandon the XSCRIPTCONTEXT and use the UNO module. We also use interfaces from Text, AWT, and LANG. Since we using the UNO module we have to import what we need straight from the com.sun.star path. | ||
+ | |||
+ | The first step is to get the functions for generating the document, and the other for manipulating the content. The document and content is under the createTable(), while insertTextIntoCell() will handle the positioning within the table. | ||
+ | |||
+ | <code>[python] | ||
+ | import uno | ||
# a UNO struct later needed to create a document | # a UNO struct later needed to create a document | ||
Line 173: | Line 189: | ||
g_exportedScripts = createTable, | g_exportedScripts = createTable, | ||
</code> | </code> | ||
+ | |||
+ | First step to understand is that the UNO module will give us the IDL binding from the API. We will then import specific things from the UNO module. For tht we need to specify the path from com.sun.star and import the interfaces and services. | ||
+ | <code>[python] | ||
+ | import uno | ||
+ | |||
+ | # a UNO struct later needed to create a document | ||
+ | from com.sun.star.text.ControlCharacter import PARAGRAPH_BREAK | ||
+ | from com.sun.star.text.TextContentAnchorType import AS_CHARACTER | ||
+ | from com.sun.star.awt import Size | ||
+ | |||
+ | from com.sun.star.lang import XMain</code> |
Revision as of 20:17, 24 May 2007
OpenOffice.org comes with a set of scripts that work as a sample on how to programmatically generate certain tasks using PyUNO.
Hello World.py
This script print a Hello World in an Writer document. This uses the XText interface, the actual content is on the String value of the XTextRange.
[python]
- HelloWorld python script for the scripting framework
def HelloWorldPython( ):
"""Prints the string 'Hello World(in Python)' into the current document"""
- get the doc from the scripting context which is made available to all scripts
model = XSCRIPTCONTEXT.getDocument()
- get the XText interface
text = model.Text
- create an XTextRange at the end of the document
tRange = text.End
- and set the string
tRange.String = "Hello World (in Python)" return None
Capitalize.py
This script will show how to modify existing content in a document. More specifically manipulate the format values from the text. We use common python commands like isupper, len and lower. And we use XSCRIPTCONTEXT for the localization of the text (XText), the control of the cursor (xWordCursor) and xSelectionSupplier in order to select the content.
[python]
- helper function
def getNewString( theString ) :
if( not theString or len(theString) ==0) : return "" # should we tokenize on "."? if theString[0].isupper() and len(theString)>=2 and theString[1].isupper() :
# first two chars are UC => first UC, rest LC
newString=theString[0:1].upper() + theString[1:].lower(); elif theString[0].isupper():
# first char UC => all to LC
newString=theString.lower() else: # all to UC. newString=theString.upper() return newString;
def capitalisePython( ):
"""Change the case of a selection, or current word from upper case, to first char upper case, to all lower case to upper case...""" import string
# The context variable is of type XScriptContext and is available to # all BeanShell scripts executed by the Script Framework xModel = XSCRIPTCONTEXT.getDocument()
#the writer controller impl supports the css.view.XSelectionSupplier interface xSelectionSupplier = xModel.getCurrentController()
#see section 7.5.1 of developers' guide xIndexAccess = xSelectionSupplier.getSelection() count = xIndexAccess.getCount(); if(count>=1): #ie we have a selection i=0
while i < count :
xTextRange = xIndexAccess.getByIndex(i); #print "string: " + xTextRange.getString(); theString = xTextRange.getString(); if len(theString)==0 : # sadly we can have a selection where nothing is selected # in this case we get the XWordCursor and make a selection! xText = xTextRange.getText(); xWordCursor = xText.createTextCursorByRange(xTextRange); if not xWordCursor.isStartOfWord(): xWordCursor.gotoStartOfWord(False); xWordCursor.gotoNextWord(True); theString = xWordCursor.getString(); newString = getNewString(theString); if newString : xWordCursor.setString(newString); xSelectionSupplier.select(xWordCursor); else :
newString = getNewString( theString ); if newString: xTextRange.setString(newString); xSelectionSupplier.select(xTextRange);
i+= 1
- lists the scripts, that shall be visible inside OOo. Can be omitted, if
- all functions shall be visible, however here getNewString shall be surpressed
g_exportedScripts = capitalisePython,
TableSample.py
On this script we abandon the XSCRIPTCONTEXT and use the UNO module. We also use interfaces from Text, AWT, and LANG. Since we using the UNO module we have to import what we need straight from the com.sun.star path.
The first step is to get the functions for generating the document, and the other for manipulating the content. The document and content is under the createTable(), while insertTextIntoCell() will handle the positioning within the table.
[python]
import uno
- a UNO struct later needed to create a document
from com.sun.star.text.ControlCharacter import PARAGRAPH_BREAK from com.sun.star.text.TextContentAnchorType import AS_CHARACTER from com.sun.star.awt import Size
from com.sun.star.lang import XMain
def insertTextIntoCell( table, cellName, text, color ):
tableText = table.getCellByName( cellName ) cursor = tableText.createTextCursor() cursor.setPropertyValue( "CharColor", color ) tableText.setString( text )
def createTable():
"""creates a new writer document and inserts a table with some data (also known as the SWriter sample)""" ctx = uno.getComponentContext() smgr = ctx.ServiceManager desktop = smgr.createInstanceWithContext( "com.sun.star.frame.Desktop",ctx) # open a writer document doc = desktop.loadComponentFromURL( "private:factory/swriter","_blank", 0, () ) text = doc.Text cursor = text.createTextCursor() text.insertString( cursor, "The first line in the newly created text document.\n", 0 ) text.insertString( cursor, "Now we are in the second line\n" , 0 ) # create a text table table = doc.createInstance( "com.sun.star.text.TextTable" )
# with 4 rows and 4 columns table.initialize( 4,4)
text.insertTextContent( cursor, table, 0 ) rows = table.Rows
table.setPropertyValue( "BackTransparent", uno.Bool(0) ) table.setPropertyValue( "BackColor", 13421823 ) row = rows.getByIndex(0) row.setPropertyValue( "BackTransparent", uno.Bool(0) ) row.setPropertyValue( "BackColor", 6710932 )
textColor = 16777215
insertTextIntoCell( table, "A1", "FirstColumn", textColor ) insertTextIntoCell( table, "B1", "SecondColumn", textColor ) insertTextIntoCell( table, "C1", "ThirdColumn", textColor ) insertTextIntoCell( table, "D1", "SUM", textColor )
values = ( (22.5,21.5,121.5), (5615.3,615.3,-615.3), (-2315.7,315.7,415.7) ) table.getCellByName("A2").setValue(22.5) table.getCellByName("B2").setValue(5615.3) table.getCellByName("C2").setValue(-2315.7) table.getCellByName("D2").setFormula("sum <A2:C2>")
table.getCellByName("A3").setValue(21.5) table.getCellByName("B3").setValue(615.3) table.getCellByName("C3").setValue(-315.7) table.getCellByName("D3").setFormula("sum <A3:C3>")
table.getCellByName("A4").setValue(121.5) table.getCellByName("B4").setValue(-615.3) table.getCellByName("C4").setValue(415.7) table.getCellByName("D4").setFormula("sum <A4:C4>")
cursor.setPropertyValue( "CharColor", 255 ) cursor.setPropertyValue( "CharShadowed", uno.Bool(1) )
text.insertControlCharacter( cursor, PARAGRAPH_BREAK, 0 ) text.insertString( cursor, " This is a colored Text - blue with shadow\n" , 0 ) text.insertControlCharacter( cursor, PARAGRAPH_BREAK, 0 )
textFrame = doc.createInstance( "com.sun.star.text.TextFrame" ) textFrame.setSize( Size(15000,400)) textFrame.setPropertyValue( "AnchorType" , AS_CHARACTER )
text.insertTextContent( cursor, textFrame, 0 )
textInTextFrame = textFrame.getText() cursorInTextFrame = textInTextFrame.createTextCursor() textInTextFrame.insertString( cursorInTextFrame, "The first line in the newly created text frame.", 0 ) textInTextFrame.insertString( cursorInTextFrame, "\nWith this second line the height of the rame raises.",0) text.insertControlCharacter( cursor, PARAGRAPH_BREAK, 0 )
cursor.setPropertyValue( "CharColor", 65536 ) cursor.setPropertyValue( "CharShadowed", uno.Bool(0) )
text.insertString( cursor, " That's all for now !!" , 0 )
g_exportedScripts = createTable,
First step to understand is that the UNO module will give us the IDL binding from the API. We will then import specific things from the UNO module. For tht we need to specify the path from com.sun.star and import the interfaces and services.
[python]
import uno
- a UNO struct later needed to create a document
from com.sun.star.text.ControlCharacter import PARAGRAPH_BREAK from com.sun.star.text.TextContentAnchorType import AS_CHARACTER from com.sun.star.awt import Size
from com.sun.star.lang import XMain