1

Word 文書のディレクトリをプログラムで印刷しようとすると問題が発生します。この例では、「3_」プレフィックスを持つファイルのみを印刷しようとしています。問題は、接頭辞が 3_ のファイルが 2 つないとファイルが印刷されないことです。私はこの問題を解決するために永遠に見回してきました。ファイルを開く方法に何か問題がありますか? ディレクトリに 2 つのファイルがある場合にのみ機能します。この場合、2 つのファイルのうちの 1 つだけが出力されます。

編集:メッセージボックスを試してみましたが、パスは正しいです。ファイル名は正しいです。また、プリンター フォルダー内のプリンターを見ていると、ドキュメントが一瞬点滅してから消えます (出力を確認できるように印刷を一時停止しています)。Word でエラーが表示される場合、表示されないのはなぜですか? ディレクトリに 3_ プレフィックスを持つ 2 つのファイルがある場合、なぜこれが機能するのでしょうか?

編集: printout() メソッドの問題だと思います。アプリを可視に設定して実行すると、ドキュメントは正常に開きますが、何も印刷されません。ドキュメントを手動で開いて印刷できます (正常に動作します)。

編集:回答ありがとうございました。printout() メソッドの background パラメータが問題でした。印刷が完全にスプールされる前にプログラムが終了します (これが、印刷キューでドキュメントが点滅して消えるのを見る理由です。バックグラウンド印刷をオフにするには、ドキュメントを開いたままにして印刷する必要がありました。これが重要でした。ありがとうございました

string[] filesToCheck = Directory.GetFiles(clientDirectoryPath);
    Object filename = null;
        for (int i = 0; i < filesToCheck.Count();i++ )
        {
            if(filesToCheck[i].Contains("3_"))
            {
                filename = filesToCheck[i];
                wrdDoc = wrdApp.Documents.Open(ref filename, ref oMissing, ref oTrue, ref oFalse,
                                               ref oMissing, ref oMissing,
                                               ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                                               ref oMissing,
                                               ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                                               ref oMissing);
                wrdDoc.PageSetup.FirstPageTray = letterHeadTray;
                wrdDoc.PageSetup.OtherPagesTray = defaultTray;
                wrdDoc.PrintOut(ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                                ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                                ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                                ref oMissing, ref oMissing, ref oMissing);
                wrdDoc.Close(ref oFalse, ref oMissing, ref oMissing);
                wrdDoc = null;
            }
        }
4

4 に答える 4

4

PrintOut () 呼び出しの Background パラメータ (第 1 パラメータ) を False に設定してみてください。

Word COM オブジェクトのリリースが早すぎるため、最後の印刷ジョブが完全にスプールされず、キャンセルされた可能性があります。

于 2009-03-21T22:54:33.690 に答える
2

使ってみて

string[] files = Directory.GetFiles(dir, "3_*.doc");
foreach(string file in files) { }

それ以外の

for (int i = 0; i < filesToCheck.Count(); i++ ) { }
于 2009-03-21T22:03:20.477 に答える
1

投稿されたアルゴリズムに問題はないようです。以下をお試しいただけますか

  1. ブレークポイントを追加して、filesToCheck オブジェクトにすべてのファイル名が含まれていることを確認しますか? この値が正しくない可能性があり、アルゴリズムが無効になっている可能性があります
  2. ドキュメントを印刷する代わりに、ファイル名ごとにメッセージ ボックスを表示するようにコードを変更します。これにより、実際の印刷が問題の一部であることが解消されます (どのようになるかはわかりません)。

また、filesToCheck オブジェクトを取得するコードを投稿していただけますか?

編集

OPは、すべてのファイルが確実に通過していると述べました。印刷操作を try/catch ブロックでラップしてみて、ファイルの印刷を妨げている例外がスローされているかどうかを確認してください。

于 2009-03-21T21:53:33.620 に答える
0

ファイル名に「_」を使用しないようにしてください。以前、その充電器と PrintOut でいくつかの奇妙な癖を見たことがあります。

于 2009-03-21T22:46:01.323 に答える