如何使用 open office uno API 克隆 TextTable 并将 N 个克隆的 TextTable 粘贴到原始 TextTable 下方
Posted
技术标签:
【中文标题】如何使用 open office uno API 克隆 TextTable 并将 N 个克隆的 TextTable 粘贴到原始 TextTable 下方【英文标题】:How to clone a TextTable and paste N cloned TextTable below the original TextTable using open office uno API 【发布时间】:2021-08-27 03:56:58 【问题描述】:我有一个 XTextTable 实例。如何 1) 将文本表(内容和格式)克隆到新的 XTextTable 实例中,2) 使用 insertTextContent 方法将新实例插入到文本表下方?
部分代码是这样的
if (element.supportsService("com.sun.star.text.TextTable")):
table = element
tableTemplate = doc.createInstance("com.sun.star.text.TextTable")
#clone properties and content of table to tableTemplate
#get the position of insertion RANGE
for datum in data:
doc.getText().insertTextContent(RANGE,childTable,False)
#replace placeholder with datum
代码在python中,但我也可以从Java翻译
【问题讨论】:
这些字符串for datum in data:
和#replace placeholder with datum
让我想到了——你想重复Mail Merge Wizard 正在做什么吗?
是的,这个想法类似于邮件合并。但是,如果该值是一个对象数组,我必须在单独的 textTable 中显示每个数组元素,其中格式/样式由用户在模板 word doc 中定义。
【参考方案1】:
在我看来,您没有选择最简单的方法来解决问题 - 创建一个新对象并克隆它的属性是一个相当费力的过程。如果您需要精确的表格副本,请尝试以下算法:
Sub CloneTable
Dim oTable As Variant ' Your object
Dim oCurrentController As Variant ' Controller will copy-paste content
Dim oViewCursor As Variant ' Cursor will select some points in document
Dim oTransferable As Variant ' "Clipboard"
oTable = ThisComponent.getTextTables().getByName("Table1") ' Get your object as you can
oCurrentController = ThisComponent.getCurrentController() ' Create (get) two important tools
oViewCursor = oCurrentController.getViewCursor()
oCurrentController.select(oTable) ' Move your cursor to the beginning of the first cell of your table
oViewCursor.goLeft(1,False) ' Move the cursor to the left (no selection), position it right before the table
oViewCursor.goRight(1,True) ' Move the cursor to the right (this time with a selection), select your entire table
oTransferable = oCurrentController.getTransferable() ' Get all the information about a selected part of document
oViewCursor.goRight(0,False) ' Remove the selection from the table
Rem (otherwise the first insert will simply overwrite the existing object and you will end up with one less table than expected)
For i = 1 to 10 ' Repeat the required number of times
oCurrentController.insertTransferable(oTransferable) ' Paste an exact copy of the object at the current cursor position
Next i
End Sub
【讨论】:
以上是关于如何使用 open office uno API 克隆 TextTable 并将 N 个克隆的 TextTable 粘贴到原始 TextTable 下方的主要内容,如果未能解决你的问题,请参考以下文章
在最新的 Open Office 安装中未找到 Python Uno
如何知道 Open Office Java API 中的属性值
使用 UI 编辑 MS Office 或 Open Office 文件的 Java API 或库
有啥方法可以将 Open Office 嵌入到我的应用程序中?