使用Python

时间:2016-04-25 23:08:18

标签: python libreoffice flowchart

有很多关于如何使用Python来控制LibreOffice文本文档和电子表格的例子,但很少有关于如何使用绘图程序的文档。我试图弄清楚如何使用Python在LibreOffice中绘制流程图或至少一些形状。我正在使用Windows 10和LibreOffice 5附带的Python 3.3。

有一个很好的示例,说明如何使用电子表格LibreOffice Python example

在示例中,如果您使用文本文档,电子表格,绘图或其他文档,则以下行很常见。

import socket  
import uno
localContext = uno.getComponentContext()
resolver =     localContext.ServiceManager.createInstanceWithContext("com.sun.star.bridge.UnoUrlResolver", localContext )
ctx = resolver.resolve( "uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext" )
smgr = ctx.ServiceManager
desktop = smgr.createInstanceWithContext( "com.sun.star.frame.Desktop",ctx)
model = desktop.getCurrentComponent()

以下代码也在示例中修改电子表格程序,效果很好。代码将“Hello World”和一个数字放在电子表格中。

cell1 = active_sheet.getCellRangeByName("C4")
cell1.String = "Hello world"
cell2 = active_sheet.getCellRangeByName("E6")
cell2.Value = cell2.Value + 1

对于绘图程序,是否有一些类似的命令来获取活动工作表并获取可以绘制的形状列表?我可能正在寻找错误的地方,但没有找到任何有关绘图程序的文档。

1 个答案:

答案 0 :(得分:3)

这是一个有效的Python示例:

import uno

def create_shape(document, x, y, width, height, shapeType):
    shape = document.createInstance(shapeType)
    aPoint = uno.createUnoStruct("com.sun.star.awt.Point")
    aPoint.X, aPoint.Y = x, y
    aSize = uno.createUnoStruct("com.sun.star.awt.Size")
    aSize.Width, aSize.Height = width, height
    shape.setPosition(aPoint)
    shape.setSize(aSize)
    return shape

def insert_shape():
    document = XSCRIPTCONTEXT.getDocument()
    drawPage = document.getDrawPages().getByIndex(0)
    shape = create_shape(
        document, 0, 0, 10000, 5000, "com.sun.star.drawing.RectangleShape")
    drawPage.add(shape)
    shape.setString("My new RectangleShape");
    shape.setPropertyValue("CornerRadius", 1000)
    shape.setPropertyValue("Shadow", True)
    shape.setPropertyValue("ShadowXDistance", 250)
    shape.setPropertyValue("ShadowYDistance", 250)
    shape.setPropertyValue("FillColor", int("C0C0C0", 16))  # blue
    shape.setPropertyValue("LineColor", int("000000", 16))  # black
    shape.setPropertyValue("Name", "Rounded Gray Rectangle")

# Functions that can be called from Tools -> Macros -> Run Macro.
g_exportedScripts = insert_shape,

https://wiki.openoffice.org/wiki/Documentation/DevGuide/Drawings/Working_with_Drawing_Documents有相当完整的参考文档。请特别注意“形状”页面(注意页面右侧的导航)。首先,有一个页面可以根据您的要求提供形状类型列表。

由于Python-UNO文档有限,因此您需要习惯于阅读Java或Basic中的示例并将代码调整为Python,如上所述。