首页 > 解决方案 > 如何合并单元格而不丢失 libreoffice-calc 中的数据?

问题描述

启动 libreoffice-calc:

soffice --calc --accept="socket,host=localhost,port=2002;urp;StarOffice.ServiceManager" 

启动 python shell 将数据写入calc

import uno
localContext = uno.getComponentContext()
resolver = localContext.ServiceManager.createInstanceWithContext("com.sun.star.bridge.UnoUrlResolver", localContext)
context = resolver.resolve("uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext")
svcmgr = context.ServiceManager
desktop = svcmgr.createInstanceWithContext("com.sun.star.frame.Desktop", context)
oDoc = desktop.loadComponentFromURL( "private:factory/scalc","_blank", 0, () )
oSheet = oDoc.getSheets().getByIndex(0)
oRange = oSheet.getCellRangeByName("A1:C3")

将数据写入oRange.

oRange.setDataArray((('a1','a2','a3'),('b1','b2','b3'),('c1','c2','c3'),))

calc现在的外观:

在此处输入图像描述

我想合并所有数据oRange并将其格式化为垂直和水平对齐。
我想要的编辑效果calc
在此处输入图像描述

oRange.merge()
oCell = oSheet.getCellByPosition(0, 0)
oCell.HoriJustify = 2
oCell.VertJustify = 2

合并数据与垂直和水平对齐,许多单元格中的先前数据b1-c1和丢失。 真实的效果。 a2-c2a3-c3
在此处输入图像描述

如何修复我的代码以获得预期的效果?

标签: python-3.xmergelibreoffice-calcuno

解决方案


import uno
localContext = uno.getComponentContext()
resolver = localContext.ServiceManager.createInstanceWithContext("com.sun.star.bridge.UnoUrlResolver", localContext)
context = resolver.resolve("uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext")
svcmgr = context.ServiceManager
desktop = svcmgr.createInstanceWithContext("com.sun.star.frame.Desktop", context)
oDoc = desktop.loadComponentFromURL( "private:factory/scalc","_blank", 0, () )
oSheet = oDoc.getSheets().getByIndex(0)
oRange = oSheet.getCellRangeByName("A1:C3")
tup = (('a1','a2','a3'),('b1','b2','b3'),('c1','c2','c3'),)
oRange.setDataArray(tup)
target =''
for item in tup:
    tmp = ' '.join(item)
    target = target + tmp + ' '

target = target.strip()
oRange.merge(True)
oCell = oSheet.getCellByPosition(0, 0)
oCell.String = target
oCell.HoriJustify = 2
oCell.VertJustify = 2

推荐阅读