Как удалить все изображения со всех листов книги 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

Я также пробовал следующее, которое не удается с основной ошибкой времени выполнения 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. Пожалуйста помогите.


person John B. Walugembe    schedule 05.09.2017    source источник


Ответы (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
person Jim K    schedule 05.09.2017
comment
Да, это прекрасно работает. Все изображения будут удалены из всего документа Calc. Большое спасибо за ответ и объяснение. - person John B. Walugembe; 05.09.2017