Top > OOobbs3 > 114

** [[OOobbs3/114]] [#icfc7533]
-''サマリ'': Calc シートの印刷に関して
-''環境'': Calc
-''状態'': 未解決
-''投稿者'': [[Yata]]
-''投稿日'': 2013-05-26 (日) 13:34:24

*** 質問 [#y7b3fba8]
OpenOfficeのCalcについての質問になります。

ファイルに複数のシートが有り、コマンドボタンを押すことにより、任意のシートのみを印刷する方法(マクロプログラム)を教えてください。
また、印刷が終了したか、終了してないか、プログラムより確認する方法ありますか?教えてください。

今現在は、下記の手順にて行っています。
 ①印刷したいシートをプログラムにより切換えアクティブにする。
 ②印刷命令を実行する。
 ③印刷が終了するのを待つ。(数秒間待っているだけ)

以上、ご教授おねがいいいたします。


*** 回答 [#ua5a658c]
- 印刷オプションについてはあまり情報もなく、あまり知られていませんが、 -- はにゃ? &new{2013-05-27 (月) 00:32:49};
- 印刷オプションについてはあまり情報もなく、あまり知られていませんが、[[OOoBasic/Calc/print]] のようにして印刷できます。print メソッドを呼び出すとコマンドの uno.PrintDirect を呼び出した結果と同じになります。

#comment
+ アクティブシートを設定でシートが切り替えられます。[[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

Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes