** [[OOobbs3/114]] [#icfc7533] -''サマリ'': Calc シートの印刷に関して -''環境'': Calc -''状態'': 未解決 -''投稿者'': [[Yata]] -''投稿日'': 2013-05-26 (日) 13:34:24 *** 質問 [#y7b3fba8] OpenOfficeのCalcについての質問になります。 ファイルに複数のシートが有り、コマンドボタンを押すことにより、任意のシートのみを印刷する方法(マクロプログラム)を教えてください。 また、印刷が終了したか、終了してないか、プログラムより確認する方法ありますか?教えてください。 今現在は、下記の手順にて行っています。 ①印刷したいシートをプログラムにより切換えアクティブにする。 ②印刷命令を実行する。 ③印刷が終了するのを待つ。(数秒間待っているだけ) 以上、ご教授おねがいいいたします。 *** 回答 [#ua5a658c] - 印刷オプションについてはあまり情報もなく、あまり知られていませんが、[[OOoBasic/Calc/print]] のようにして印刷できます。print メソッドを呼び出すとコマンドの uno.PrintDirect を呼び出した結果と同じになります。 + アクティブシートを設定でシートが切り替えられます。[[OOoBasic/Calc/activesheet]] + 前出の印刷ページ参照。ドキュメント未記載の PrintContent = 1 を渡すと選択範囲のみが印刷されます。(0 を指定しても全ページが印刷されない気もしますが・・・。) + 待つだけであれば、wait 関数で行えます。以下のような印刷ジョブリスナーを利用できるかもしれません。 ... listener = CreateUnoListener("PrintJobListener_", "com.sun.star.view.XPrintJobListener") oDoc.addPrintJobListener(listener) oDoc.print(args) Sub PrintJobListener_printJobEvent(ev) msgbox ev.State End Sub Sub PrintJobListener_disposing(ev) End Sub ファイルへの印刷では JOB_STARTED、JOB_SPOOLED の順に通知されたものの、JOB_COMPLETED が渡されませんでした。環境に応じてテストが必要でしょう。メソッドと引数については &idlref(com.sun.star.view.XPrintJobListener);。 また、追加したリスナーは非同期で呼ばれるようなので、リスナーを削除するには、リスナー(とドキュメントのセット)をグローバル変数に保管しておく必要があるかもしれません。 -- はにゃ? &new{2013-05-27 (月) 00:32:49}; #comment *** 感想,コメント,メモ [#u49d7d77] #comment |