Top > OOobbs3 > 114

OOobbs3/114 Edit

  • サマリ: Calc シートの印刷に関して
  • 環境: Calc
  • 状態: 未解決
  • 投稿者: Yata?
  • 投稿日: 2013-05-26 (日) 13:34:24

質問 Edit

OpenOfficeのCalcについての質問になります。

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

今現在は、下記の手順にて行っています。

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

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

回答 Edit

  • 印刷オプションについてはあまり情報もなく、あまり知られていませんが、OOoBasic/Calc/print のようにして印刷できます。print メソッドを呼び出すとコマンドの uno.PrintDirect を呼び出した結果と同じになります。
  1. アクティブシートを設定でシートが切り替えられます。OOoBasic/Calc/activesheet
  2. 前出の印刷ページ参照。ドキュメント未記載の PrintContent = 1 を渡すと選択範囲のみが印刷されます。(0 を指定しても全ページが印刷されない気もしますが・・・。)
  3. 待つだけであれば、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 が渡されませんでした。環境に応じてテストが必要でしょう。メソッドと引数については com.sun.star.view.XPrintJobListener

また、追加したリスナーは非同期で呼ばれるようなので、リスナーを削除するには、リスナー(とドキュメントのセット)をグローバル変数に保管しておく必要があるかもしれません。

  • はにゃ? 2013-05-27 (月) 00:32:49

感想,コメント,メモ Edit



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