Добавления текста в документ
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 )