C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 77 を表示中)
■45301 / )  Re[4]: Officeの印刷
□投稿者/ 魔界の仮面弁士 (1442回)-(2010/01/09(Sat) 10:07:42)
No45290 (初心者です さん) に返信
> new object[]{oFilePath,
> oMissing,  oMissing,  oMissing,  oMissing,  oMissing,
> oMissing,  oMissing,  oMissing,  oMissing,  oMissing,
> oMissing,  oMissing,  oMissing,  oMissing,  oMissing});

oMissing とは、System.Type.Missing の事でしょうか?

だとすれば、optional パラメータは省略可能ですので、
上記は new object[]{oFilePath} でも動作します。


それと、VB のアセンブリを使う事に抵抗が無ければ、
> oWord = docApp.GetType().InvokeMember("Documents", BindingFlags.GetProperty, null, docApp, null);
> oDoc = oWord.GetType().InvokeMember("Open", BindingFlags.InvokeMethod, null, oWord, new object[]{oFilePath, …});
というコードは、Microsoft.VisualBasic.DLL を参照設定すると、
  using Microsoft.VisualBasic;
  using VB = Microsoft.VisualBasic.Interaction;
としておいた上で、
  oWord = VB.CallByName(docApp, "Documents", CallType.Get);
  oDoc = VB.CallByName(oWord, "Open", CallType.Method, oFilePath);
のように、比較的短く記述することができますよ。


> のような感じ行いたいのですが印刷ができません。
それはエラーになるという事ですか?
だとしたら、その例外(あるいは例外の InnerException)は何になっていますか?


> oDocPrint = oWord.GetType().InvokeMember("PrintOut", BindingFlags.GetProperty, null, oWord,
> new object[] {
> oTrue,  oFalse,  range,  oMissing,  oMissing,  oMissing,
> items,  copies,  pages,  pageType,  oFalse,  oTrue,
> oMissing,  oFalse,  oMissing,  oMissing,  oMissing,  oMissing
> });
やりたい事は、「oDoc」に読み込まれた文書を印刷することですよね?

しかし、oWord は Documents オブジェクトです。上記の構文で呼び出されるのは、
『Documents オブジェクトの PrintOut プロパティ』となる事に注意してください。

Documents には、PrintOut というプロパティもメソッドもありませんので、
当然、呼び出すことはできません。

ここで呼び出すべきは、『Document オブジェクトの PrintOut メソッド』です。
# あるいは、Document.PrintOut の代わりに、Application.PrintOut でも役目は果たせますが、
# oDoc を印刷するという視点から見ると、Document.PrintOut の方が自然でしょうね。


なお、Word 2007 の場合、
 Application.PrintOut メソッド…引数 19個
 Document.PrintOut    メソッド…引数 18個
という定義になっています。引数の数が違いますのでご注意あれ。
(もっとも optional 引数なので、引数指定は省略することもできますが)

返信 編集キー/


管理者用

- Child Tree -