首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在libreoffice-calc中合并单元格而不丢失数据?

如何在libreoffice-calc中合并单元格而不丢失数据?
EN

Stack Overflow用户
提问于 2020-08-31 09:12:54
回答 2查看 123关注 0票数 0

启动libreoffice-calc:

代码语言:javascript
复制
soffice --calc --accept="socket,host=localhost,port=2002;urp;StarOffice.ServiceManager" 

启动python shell将数据写入calc

代码语言:javascript
复制
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

代码语言:javascript
复制
oRange.setDataArray((('a1','a2','a3'),('b1','b2','b3'),('c1','c2','c3'),))

现在计算的外观:

我想合并oRange中的所有数据,并将其格式化为垂直和水平对齐方式。

我在编辑calc中想要的效果。

代码语言:javascript
复制
oRange.merge()
oCell = oSheet.getCellByPosition(0, 0)
oCell.HoriJustify = 2
oCell.VertJustify = 2

合并垂直和水平对齐的数据,许多单元格b1-c1a2-c2a3-c3中以前的数据丢失。

真正的效果。

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

EN

回答 2

Stack Overflow用户

发布于 2020-08-31 14:01:57

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2020-11-09 01:27:17

我不确定,但我认为UNO没有办法知道您希望以这种方式将数据重新排列到合并的单元格中。UNO所做的是从“主”单元格(左上角)“复制”数据,并将其数据“粘贴”到合并后的单元格中。因此,您可以在合并之前更改主单元格的数据。检查下面的示例。

代码语言:javascript
复制
# get range
oRange = oSheet.getCellRangeByName("A1:C3")

# build string
flat_list = [str(item) for sublist in oRange.getDataArray() for item in sublist]
string = ' '.join(flat_list)

# put string into main cell
main_cell = oRange.getCellByPosition(0, 0) 
main_cell.setString(string)

# merge
oRange.merge()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63663591

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档