使用 OLE,从 OpenOffice/LibreOffice Calc 文档中删除除第一个以外的所有工作表,而不使用工作表名称

Posted

技术标签:

【中文标题】使用 OLE,从 OpenOffice/LibreOffice Calc 文档中删除除第一个以外的所有工作表,而不使用工作表名称【英文标题】:Using OLE, remove all sheets except first one from a OpenOffice/LibreOffice Calc document, without using sheet names 【发布时间】:2021-12-20 18:55:57 【问题描述】:

从基于代码创建的 OpenOffice/LibreOffice Calc 文档中,我们的想法是添加一个工作表作为第一个工作表,然后删除所有其他工作表(通常该文档带有 3 个工作表)。

它在 Windows 上通过 xHarbour 语言程序使用 OLE,但任何语言都可以,如果有人知道用任何语言来做,翻译都不是问题。

我使用工作表名称让它工作。我认为直接使用索引来删除它们应该会更好,但是我无法仅使用索引来做到这一点。

我得到的代码是:

oPlan := oSheetDoc:GetSheets()
oPlan:insertNewByName("My New Sheet", 0)
DO WHILE oPlan:GetCount() > 1
    oPlan:removeByName(oPlan:GetByIndex(oPlan:GetCount()-1):getName())
ENDDO

我认为这应该是我在 OpenOffice 的在线文档中找不到的“按索引删除”。

有人知道有没有办法只用索引来做,或者比我做的更好?

【问题讨论】:

【参考方案1】:

根据https://forum.openoffice.org/en/forum/viewtopic.php?f=20&t=94494,工作表只能按名称删除。

oSheets = oDoc.Sheets
aSheetNames() = oSheets.getElementNames()
for iSheet = 1 to ubound(aSheetNames)
    oSheets.removeByName(aSheetNames(iSheet))
next iSheet

【讨论】:

以上是关于使用 OLE,从 OpenOffice/LibreOffice Calc 文档中删除除第一个以外的所有工作表,而不使用工作表名称的主要内容,如果未能解决你的问题,请参考以下文章

使用 OLE,从 OpenOffice/LibreOffice Calc 文档中删除除第一个以外的所有工作表,而不使用工作表名称

从剪贴板保存 OLE 对象

使用 OLE 时如何绕过 MS Access 启动?

C# 如何从存储在数据库中的 OLE 对象中保存图像

从 C# 如何调用需要 *VARIANT 参数的非托管 OLE 接口?

OLE 入门 - 啥是好的学习项目选择?