PDF変換の際のSelectionパラメーター指定方法

お世話になっております。

Officeファイルをサーバー上でコマンドラインを使ってGUI無しでPDF化しようとしており、CalcのPDFエクスポートのオプションの「選択/選択したシート」(画像赤枠)に対応したコマンドを実行したいと考えています。

オンラインヘルプを見ていると、「Selection」パラメータ(以下URLのSelection)が相当するのではないかと考えています。
https://help.libreoffice.org/latest/ja/text/shared/guide/pdf_params.html

Selectionをコマンドラインに指定しようとするのですが、ヘルプにはtypeがanyとなっており、どのような値を指定していいか分かりませんでした。

ここで、ご教授して頂きたいのですが、
1.UIの「選択/選択したシート」に相当するパラメータは「Selection」でしょうか?
2.「Selection」の場合、typeがanyの場合はどのような形で指定すればいいでしょうか?

以上となります。
よろしくお願い致します。

1.については、そうだと思われます。
2.については、下記URLによるとコマンドラインからは無理のようです。

2 Likes

t-tamura様、sabr0様の言われる様にコマンドラインからは指定が効かない様ですね。
例えばですが、以下の様なExcelブック保存時のアクティブシートをPDF出力するようなものをマイマクロに登録しておいて、マクロ指定でコマンドライン起動する方法は如何でしょうか…ご参考までに…
soffice --headless --calc “macro:///Standard.Module1.ExportToPDF” “c:\temp\○○○.xlsx”

Sub ExportToPDF
    Dim arg(0) As new com.sun.star.beans.PropertyValue
	arg(0).Name = "Selection"
	arg(0).Value = ThisComponent.CurrentController.ActiveSheet
	
    Dim args(1) as new com.sun.star.beans.PropertyValue
    args(0).Name = "FilterName"
	args(0).Value = "calc_pdf_Export"
	args(1).Name = "FilterData"
	args(1).Value = arg()

 	ThisComponent.storeToURL(ThisComponent.URL & ".pdf" , args())
    StarDesktop.terminate()
End Sub

1 Like

脱線:
手元の環境でこいつを表示させることができなくて悩んでる

https://opengrok.libreoffice.org/xref/core/filter/source/pdf/impdialog.cxx?r=f9d61250208d4aff335c3cc4d6a12563db425efb#710

このルートなら文字列で行けないかなーと思ったんだけど・・・

https://opengrok.libreoffice.org/xref/core/filter/source/pdf/pdfexport.cxx?r=f3fc477dab60f4f1c741b4453b4d0d34d00a46ba#544

すいません、個別に返信してしましたが、返信は削除して1つにまとめます。
.
@sabr0 さん
URLの紹介、ありがとうございます。
URLを確認しました。知りたいことが載っていました。
調べ方が甘かったですね・・・
.
コメントありがとうございました。
.
@su_do さん
コメントありがとうございます。
.
紹介していただいたマクロでアクティブシートのみをPDFへ出力することが出来ました。
マクロによるPDF出力も検討しようと思います。
.
ここで、シートA、シートB、シートCがあって、それぞれ以下のような状態の場合、にシートBとCを出力出来るようになりたいと考えています。
・シートA ・・・ 未選択状態
・シートB ・・・ 選択状態
・シートC ・・・ 選択状態(UIで開くと表示される(アクティブ))
.
上記の場合に頂いたマクロではCのシートのみとなりました。
arg(0).Valueに指定している値を違うものにすればいいのではないかと考えています。
なので、マクロについて調べてみようと思います。
.
もう一点あるのですが、「選択/選択したシート」以外にも指定したいオプションがあります。
それらすべてをマクロから実行するとして、マクロに引数ありの関数を作成してみるのはどうかと思っています。
マクロに疎いので、その辺りが良く分かっていないのですが、試行錯誤してみようと思います。
.
@himajin100000 さん
コメントありがとうございます。
"SheetRange"ってオプションがありそうということですかね?
.
試してみましたが、よく分かりませんでした💦

マイマクロに後述のマクロを登録し、以下のコマンドライン(関数に対して出力先を引数として渡す)で実現したいことが出来ました。

soffice --headless --calc “macro:///Standard.Module1.ExportToPDF(C:/Users/Public/Desktop/hoge/)” “C:\tmp\hoge.xlsx”

■マクロ

' PDFに変換する関数
Sub ExportToPDF(outputFolder As String)
    Dim arg(0) As New com.sun.star.beans.PropertyValue
    arg(0).Name = "Selection"
    arg(0).Value = GetSelectedSheets(ThisComponent)

    Dim args(1) As New com.sun.star.beans.PropertyValue
    args(0).Name = "FilterName"
    args(0).Value = "calc_pdf_Export"
    args(1).Name = "FilterData"
    args(1).Value = arg()

    ' 保存先ファイル名を作成
    Dim fileName As String
    Dim docTitle As String
    Dim dotPos As Integer

    docTitle = ThisComponent.Title

	' 最後の "." の位置を取得(左からループで検索)
	dotPos = 0
	Dim i As Integer
	For i = Len(docTitle) To 1 Step -1
  	  If Mid(docTitle, i, 1) = "." Then
	        dotPos = i
	        Exit For
 	   End If
	Next i

    ' 拡張子を削除("." が見つかった場合のみ)
	If dotPos > 0 Then
    	docTitle = Left(docTitle, dotPos - 1)
	End If

	' 出力ファイル名
    fileName = docTitle & ".pdf"

	' 出力ファイル名をURLへ変換
    Dim outputURL As String
    outputURL = ConvertToURL(outputFolder  & fileName)

    ' PDFを指定フォルダに保存
	ThisComponent.storeToURL(outputURL, args())

    ' LibreOfficeを終了
    StarDesktop.terminate()
End Sub

' 選択されたシートを取得する関数
Function GetSelectedSheets(oDoc As Object) As Object
    Dim oController As Object
    Dim oSelection As Object
    oController = oDoc.CurrentController
    oSelection = oController.getSelection()
    
    ' 選択範囲がシートオブジェクトでない場合はドキュメント全体をエクスポート
    If oSelection Is Nothing Then
    	' シートが選択されていない(そんな状況あるか)
        GetSelectedSheets = oDoc.Sheets
    ElseIf NOT oSelection.supportsService("com.sun.star.sheet.SheetCellRanges") Then
    	' 単一シートが選択されている
        GetSelectedSheets = oDoc.CurrentController.ActiveSheet
    Else
    	' 複数シートが選択されている
        GetSelectedSheets = oSelection
    End If
End Function

マクロ内の関数に引数も渡すことも出来ましたので、ひとまず本質問は解決とさせていただきます。
コメントしていただいた皆様ありがとうございました!大変助かりました。

また何かありましたら、よろしくお願い致します。

3 Likes