Макрос 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
также массив PropertyValue
s используется.
Итак, мы получаем:
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