a-o_o-kawaのブログ

自作アプリの紹介などを中心に書き込んでいきます。Twitterアドレス:@2010aoのフォローもお願いします。

全体表示

[ リスト ]

イメージ 1
OLEオートメーションを利用してExcelから印刷するプログラムを作成する時、デフォルトプリンタ以外に印刷したい場合がありますが、C++Builderのプリンタダイアログだけではプリンタの変更はできません。
そんな時はエクセルのActivePrinterプロパティを変更して印刷するのですが、エクセルのプリンタ設定はちょっと癖があり「プリンタ名 on Ne03」のようにフォーマットしてやる必要があります。

※TForm1にあるButton7を押すとプリンタダイアログが表示され、選択されたプリンタのフォーマット文字がエクセルのB3セルに出力された上、そのプリンタに印刷されます。



void __fastcall TForm1::Button7Click(TObject *Sender)
{
UnicodeString PrinterName;

Variant Excel;
Variant Books;
Variant Book;
Variant Wsheets;
Variant Wsheet;
Variant range;

if (PrinterSetupDialog1->Execute()==mrOk) {
// 選択されたプリンタを会得
        TPrinter *MyPrint = Printer();

// プリンタのフォーマット 例:Canon MP640 Series Printer on Ne03
PrinterName.sprintf(L"%s on Ne%02d:",
MyPrint->Printers->Strings[MyPrint->PrinterIndex],
MyPrint->PrinterIndex);

// エクセルのOLE接続を作成する
Excel   = Excel.CreateObject("Excel.Application");
Excel.OlePropertySet("Visible", "True");
Books   = Excel.OlePropertyGet("Workbooks");
Book    = Books.OleFunction("Add");
Wsheets = Book.OlePropertyGet("Sheets");
Wsheet  = Wsheets.OlePropertyGet("Item", "Sheet1");

// ActivePrinterプロパティに選択されたプリンタをセットする
Excel.OlePropertySet("ActivePrinter",PrinterName.t_str());

// セルに書き込む
range = Sheet.OlePropertyGet("Range", "B3" );
range.OlePropertySet("Value", PrinterName.t_str());

// エクセルを表示する
Excel.OlePropertySet( "Visible", "True" );

// エクセルのシートを印刷する
Wsheet.OleFunction("PrintOut");

// エクセルに制御を渡す
Excel = Unassigned;
}
}

閉じる コメント(0)

コメント投稿

顔アイコン

顔アイコン・表示画像の選択

名前パスワードブログ
絵文字
×
  • オリジナル
  • SoftBank1
  • SoftBank2
  • SoftBank3
  • SoftBank4
  • docomo1
  • docomo2
  • au1
  • au2
  • au3
  • au4
投稿

.


プライバシー -  利用規約 -  メディアステートメント -  ガイドライン -  順守事項 -  ご意見・ご要望 -  ヘルプ・お問い合わせ

Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

みんなの更新記事