プリンタプロパティをExcel印刷に反映させるには

解決


yukkie  2011-10-18 16:16:47  No: 41041  IP: 192.*.*.*

まず、ユーザに任意のプリンタを選択させ、そのプリンタの特定の
プロパティを設定してもらいます。これについては下記のURLの情報を
参考にして正常に作動しました。
http://delfusa.main.jp/delfusafloor/archive/www.nifty.ne.jp_forum_fdelphi/samples/00613.html

  で、その後エクセルのBOOKを開いて印刷するんですが、その印刷の
際に先に設定したプリンタ特定のプロパティを反映させることは出来
ないでしょうか?
    ExcelObj, WorkBook: Variant;
begin
    ExcelObj:=CreateOleObject('Excel.Application');
    WorkBook:=ExcelObj.WorkBooks.Open(ExtractFilePath(Application.Exename)+'TEST.xls');
//  Printer.SetPrinter(Device, Driver, Port, DeviceMode);
    WorkBook.PrintOut(EmptyParam,EmptyParam,EmptyParam,EmptyParam,
                                                   cbPrinter.Items[cbPrinter.ItemIndex]);
    ExcelObj.quit;
    WorkBook:=unAssigned;
    ExcelObj:=unAssigned;
end;
  印刷は上のようにWorkBookを単純に印刷するだけのものですが、
このままではプリンタデフォルトの設定で印刷されるだけです。
  上記のコメントアウトしている行でプリンタを再設定しても
結果は変わりませんでした

  何か方法が有るのであれば、ご教示下さい。よろしくお願いします。

編集 削除
Mr.XRAY  2011-10-20 11:46:59  No: 41042  IP: 192.*.*.*

こんにちは.Mr.XRAYです.

エクセルやワードは,プリンタの情報を内部で処理しています.
外部から直接指定可能な設定,プロパティは,PrintOutの引数で指定可能なものだけです.
エクセルの印刷ダイアログを表示し,そこで設定すれば,印刷に反映されます.

編集 削除
yukkie  2011-10-21 11:33:44  No: 41043  IP: 192.*.*.*

Mr.XRAYさん、こんにちは。

  そうですか。delphi側で設定した特定プリンタのプロパティは
反映できないってことですね。
  プリンタプロパティを設定してもらったら、それを保存して2
回目以降は入力の省略化を図っていたんですが、言われるように
Excel側からダイアログを発生させる方向で色々考えてみます。

  レス、ありがとうございました。

編集 削除
Sara  2011-11-19 21:21:13  No: 41044  IP: 192.*.*.*

どのような設定をしたいのかにもよりますが、
例えば、通常使うプリンターから別のプリンターに変更して、
なおかつ印刷カセット(トレイ)を指定する程度であれば、Delphi側から
制御可能です。用紙サイズとか印刷方向とかは、一般的には
Delphiから印刷したいExcelシートを作成する段階で指定すると
思いますので、意味がないですし。

ちなみに、DelphiからExcelを通して印刷する際に印刷カセットを変更して
印刷するプログラムを書いて正常に動作しています。

実際の方法としては・・・デフォルトプリンタの設定を一時保存して
印刷したいプリンターおよび、カセット等を変更したものを、デフォルト
プリンターとして設定します。その後Excelで印刷を行い、一時保存した
以前のデフォルトプリンタの情報を元に戻すと・・・こんな感じだったかな。
ちょっと、せこいですが・・・(^^;

編集 削除