Примеры макросов в AText

Добавления текста в документ


def HelloWorldPython():
   """Печатает строку 'Hello World in Python' в текущий документ
   """

   # Получаем документ из контекста скрипта, который доступен для всех скриптов.                                                                                                                                                      
   desktop = XSCRIPTCONTEXT.getDesktop()
   model = desktop.getCurrentComponent()

   # Проверяем, есть ли уже открытый документ.
   # Если нет, то создаем новый
   if not hasattr(model, "Text"):
       model = desktop.loadComponentFromURL(
           "private:factory/swriter", "_blank", 0, ())

   # Получаем интерфейс XText
   text = model.Text

   # Создаем XTextRange в конце документа
   tRange = text.End

   # Добавляем строку
   tRange.String = "Hello World in Python"

   return None

Изменение регистра текста


def getNewString(theString):
   """Вспомогательная функция
   """
   if (not theString):
       return ""

   # должны ли обозначать "."?
   if len(theString) >= 2 and theString[:2].isupper():
       # Если первые два символа в верхнем регистре, тогда первый символ оставляем в    #верхнем регистре, а остальные переводим в нижний регистр
       newString = theString[0].upper() + theString[1:].lower()

   elif theString[0].isupper():
       # Если первый символ в верхнем регистре, тогда все переводим в нижний регистр
       newString = theString.lower()

   else:
       # все переводим  в верхний регистр
       newString = theString.upper()

   return newString

def capitalisePython():
   """Измение регистра выбранных или текущих слов.
        Если хотя бы  два первых символа в верхнем регистре, то все остальные изменяются на   верхний регистр.
        Если первый символ в верхнем регистре, тогда остальные переводим в нижний регистр
        В противном случае все они будут изменены на верхний регистр.
   """
   # Контекстная переменная имеет тип XScriptContext и доступна для
   # всех скриптов BeanShell, выполняемых Script Framework
   xModel = XSCRIPTCONTEXT.getDocument()

   # контроллер поддерживает интерфейс css.view.XSelectionSupplier
   xSelectionSupplier = xModel.getCurrentController()

 
   xIndexAccess = xSelectionSupplier.getSelection()
   count = xIndexAccess.getCount()

   if(count >= 1):
       i = 0

   while i < count:
       xTextRange = xIndexAccess.getByIndex(i)
       theString = xTextRange.getString()
       # печатаем ("theString")
       if len(theString) == 0:
           # У нас может быть выборка, в которой ничего не выбрано
           # в этом случае мы получаем XWordCursor и делаем выбор!
           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

g_exportedScripts = capitalisePython,


Создание таблицы


import uno

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

def insertTextIntoCell(table, cellName, text, color):
   tableText = table.getCellByName(cellName)
   cursor = tableText.createTextCursor()

   cursor.setPropertyValue("CharColor", color)
   tableText.setString(text)

def createTable():
   """Создание таблицы в AText и добавление в нее значений
   """
   ctx = uno.getComponentContext()
   smgr = ctx.ServiceManager
   desktop = smgr.createInstanceWithContext("com.sun.star.frame.Desktop", ctx)

   # Открываем документ AText
   doc = desktop.loadComponentFromURL(
       "private:factory/swriter", "_blank", 0, ())

   text = doc.Text
   cursor = text.createTextCursor()
   text.insertString(cursor, "Название таблицы\n", 0)

   # Создаем текстовую таблицу
   table = doc.createInstance("com.sun.star.text.TextTable")

   # Таблица будет состоять из 4 строк и 4 столбцов
   table.initialize(4, 4)

   text.insertTextContent(cursor, table, 0)
   rows = table.Rows

   table.setPropertyValue("BackTransparent", uno.Bool(0))
   table.setPropertyValue("BackColor", 16777215)
   row = rows.getByIndex(0)
   row.setPropertyValue("BackTransparent", uno.Bool(0))
   row.setPropertyValue("BackColor", 16777215)

   textColor = 555

   insertTextIntoCell(table, "A1", "Первая значение", textColor)
   insertTextIntoCell(table, "B1", "Второе значение", textColor)
   insertTextIntoCell(table, "C1", "Третье значение", textColor)
   insertTextIntoCell(table, "D1", "Сумма", textColor)

   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>")

g_exportedScripts = createTable,

Класс для работы в документе AText


import uno

from com.sun.star.text.ControlCharacter import PARAGRAPH_BREAK

class PrintToAText:
   """Класс, который позволяет печатать материалы в документе AText.
        Можно даже использовать для создания документов или отчетов."""
   def __init__( self ):
       desktop = XSCRIPTCONTEXT.getDesktop()
       self.oWriterDoc = desktop.loadComponentFromURL( "private:factory/swriter", 0, 0, () )
       self.oWriterText = self.oWriterDoc.getText()
       self.oWriterCursor = self.oWriterText.createTextCursor()

   def writeLn( self, *args ):
       if len( args ) > 0:
           self.write( *args )
       self.writeParagraphBreak()

   def write( self, arg1, *argsRest ):
       self.writeOne( arg1 )
       for arg in argsRest:
           self.writeTab()
           self.writeOne( arg )

   def writeOne( self, arg, bAbsorb=False ):
       self.writeString( str( arg ), bAbsorb )

   def writeTab( self, bAbsorb=False ):
       self.writeString( "\t", bAbsorb )

   def writeParagraphBreak( self, bAbsorb=False ):
       self.writeControlCharacter( PARAGRAPH_BREAK, bAbsorb )

   def writeString( self, cString, bAbsorb=False ):
       self.oWriterText.insertString( self.oWriterCursor, cString, bAbsorb )

   def writeControlCharacter( self, nCtrlChar, bAbsorb=False ):
       self.oWriterText.insertControlCharacter( self.oWriterCursor, nCtrlChar, bAbsorb )