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

Joh*_*mbe 1 libreoffice libreoffice-calc

我有一本Libreoffice Calc工作簿,其中有60多张纸,其中许多纸上都印有沉重的图像。我想使用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
Run Code Online (Sandbox Code Playgroud)

我还尝试了以下操作,但由于基本运行时错误而失败 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
Run Code Online (Sandbox Code Playgroud)

以下代码将从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
Run Code Online (Sandbox Code Playgroud)

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

Jim*_*m K 5

对于电子表格,您需要获取每个工作表的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
Run Code Online (Sandbox Code Playgroud)