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

问题描述:

我有一个Libreoffice Calc工作簿,其中有60多张图片,其中很多图片都被复制到它们中。我想用Calc Basic宏删除所有的图像。 我已经试过这失败,一个基本的运行时错误说Property or method not found: Pictures.如何从LibreOffice Calc工作簿的所有工作表中删除所有图像

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工作簿的所有工作表中删除所有图像。请帮帮我。

对于电子表格,您需要为每张表格获取XDrawPage

这里是正确的LibreOffice基本代码。按照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 
+0

是的,完美的作品。所有的图像都从所有的Calc文档中删除。非常感谢你的回答和解释。 –