PyUNO samples

From Apache OpenOffice Wiki
Revision as of 19:47, 24 May 2007 by Jza (Talk | contribs)

Jump to: navigation, search

[python]# HelloWorld python script for the scripting framework

def HelloWorldPython( ):

   """Prints the string 'Hello World(in Python)' into the current document"""
  1. get the doc from the scripting context which is made available to all scripts
   model = XSCRIPTCONTEXT.getDocument()
  1. get the XText interface
   text = model.Text
  1. create an XTextRange at the end of the document
   tRange = text.End
  1. and set the string
   tRange.String = "Hello World (in Python)"
   return None

[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


  1. lists the scripts, that shall be visible inside OOo. Can be omited, if
  2. all functions shall be visible, however here getNewString shall be surpressed

g_exportedScripts = capitalisePython,

[python]import uno

  1. 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,

Personal tools