如何从 Libreoffice Calc 工作簿的所有工作表中删除所有图像

Posted

技术标签:

【中文标题】如何从 Libreoffice Calc 工作簿的所有工作表中删除所有图像【英文标题】:How to delete all images from all sheets of a Libreoffice Calc Workbook 【发布时间】:2017-09-05 06:53:26 【问题描述】:

我有一个包含 60 多张纸的 Libreoffice Calc 工作簿,其中许多都复制了厚重的图像。我想使用 Calc Basic 宏删除所有图像。 我尝试了以下失败,并出现基本运行时错误,说 Property or method not found: Pictures.

Sub DeleteAllPics()
    Dim Pic As Object
    For Each Pic In ThisComponent.CurrentController.ActiveSheet.Pictures
       Pic.Delete
Next Pic
End Sub

我还尝试了以下失败并出现基本运行时错误Object variable not set.

Sub deleteAllPics()
    Dim wkSheet As Object
    For Each wkSheet In ThisWorkbook.ThisComponent.Sheets.getByName()
        Dim Pict As Object
        For Each Pict In wkSheet
            Pict.Delete
        Next Pict
    Next wkSheet       
End Sub

以下代码将从 Libreoffice Writer 文档的所有页面中删除所有图片:

   Sub RemoveImages
       Dim oDoc as Object
       oDoc = ThisComponent
       Dim oGraphics as Object
       oGraphics = oDoc.getGraphicObjects()
       Dim oImg as Object
       For Each oImg in oGraphics
       oDoc.getText().removeTextContent(oImg)
       Next 
    End Sub

我需要一个与上述代码类似的代码,以从 Calc 工作簿的所有工作表中删除所有图像。请帮帮我。

【问题讨论】:

【参考方案1】:

对于电子表格,您需要获取每张工作表的XDrawPage。

这是正确的 LibreOffice Basic 代码。在 LibreOffice 中,它被称为电子表格或文档,而不是工作簿。 For Each 也是从 VBA 借来的,不适用于 XDrawPage。 (工作表可以用For Each 枚举,但为了保持一致,首选标准For 循环。)

Sub DeleteAllPics()
    Dim oDoc As Object
    Dim oDrawPage As Object
    Dim oShape As Object
    Dim iShape As Integer
    Dim iSheet As Integer
    oDoc = ThisComponent
    For iSheet = 0 To oDoc.getSheets().getCount() - 1
        oDrawPage = oDoc.getSheets().getByIndex(iSheet).getDrawPage()
        For iShape = oDrawPage.getCount() - 1 To 0 Step -1
            oShape = oDrawPage.getByIndex(i)
            oDrawPage.remove(oShape)
        Next iShape
    Next iSheet
End Sub

【讨论】:

是的,效果很好。从所有 Calc 文档中删除所有图像。非常感谢您的回答和解释。

以上是关于如何从 Libreoffice Calc 工作簿的所有工作表中删除所有图像的主要内容,如果未能解决你的问题,请参考以下文章

从 LibreOffice Calc 工作簿导入

如何将数据从 LibreOffice Calc 导入 SQL 数据库?

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

是否可以从 OPEN Libreoffice Calc 文件中读取数据?

如何从 MySQL 数据库实时更新 LibreOffice Calc 单元格?

LibreOffice Calc 宏将命名工作表保存在 csv 文件中