Макрос LibreOffice Calc: Как экспортировать диапазон ячеек в файл PDF?

У меня есть следующий код для экспорта листа в файл PDF:

Option Explicit

Sub exportToPdf

    Dim document As Object
    Dim dispatcher As Object

    document=ThisComponent.CurrentController.Frame
    dispatcher=createUnoService("com.sun.star.frame.DispatchHelper")

    Dim args1(1) as new com.sun.star.beans.PropertyValue

    args1(0).Name = "URL"
    args1(0).Value = "file:///home/someuser/Desktop/exported.pdf"
    args1(1).Name = "FilterName"
    args1(1).Value = "calc_pdf_Export"

    dispatcher.executeDispatch(document, ".uno:ExportDirectToPDF", "", 0, args1())

End Sub

Это работает правильно. У меня есть следующие вопросы:

  • Можно ли экспортировать PDF без создания unoService? (А как это сделать?)

  • Как экспортировать диапазон ячеек вместо целого листа?

1 ответ

Решение

Создание uno сервисов не проблема. Но диспетчера вы должны избегать. Вот почему запись макроса с помощью openoffice не очень полезна. Вы должны беспокоиться о API.

Из этого туториала Вы узнаете, как работает экспорт PDF в целом: https://wiki.openoffice.org/wiki/API/Tutorials/PDF_export

Для настройки MediaDescriptor нужно. https://www.openoffice.org/api/docs/common/ref/com/sun/star/document/MediaDescriptor.html

Этот сервис может быть представлен как::com::sun::star::beans::PropertyValue[]. Этот тип имеет Name а также Value свойства.

это MediaDescriptor нужно по крайней мере FilterName, Не очень актуальный список FilterNames можно найти здесь: https://wiki.openoffice.org/wiki/Framework/Article/Filter/FilterList_OOo_3_0

Для дальнейшей настройки FilterData возможно. Для тех, кто читает: https://wiki.openoffice.org/wiki/API/Tutorials/PDF_export

Начиная с демонстрации данных фильтра в https://wiki.openoffice.org/wiki/API/Tutorials/PDF_export для Value из FilterData также массив PropertyValues используется.

Итак, мы получаем:

sub storeCellRangeToPDF()

 oDoc   = ThisComponent
 oController = oDoc.getCurrentController()
 oSheet = oController.getActiveSheet()
 oCellRange = oSheet.getCellRangeByName("$A$1:$B$3")

 dim aFilterData(0) as new com.sun.star.beans.PropertyValue
 aFilterData(0).Name = "Selection"
 aFilterData(0).Value = oCellRange

 dim aMediaDescriptor(1) as new com.sun.star.beans.PropertyValue
 aMediaDescriptor(0).Name = "FilterName"
 aMediaDescriptor(0).Value = "calc_pdf_Export"
 aMediaDescriptor(1).Name = "FilterData"
 aMediaDescriptor(1).Value = aFilterData()

 oDoc.storeToURL("file:///home/axel/Dokumente/test.pdf", aMediaDescriptor())

end sub
Другие вопросы по тегам