如何从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
是的,完美的作品。所有的图像都从所有的Calc文档中删除。非常感谢你的回答和解释。 –