Word ドキュメントのディレクトリをプログラムで印刷しています...最後のファイルは常にスキップされます

StackOverflow https://stackoverflow.com/questions/670060

質問

Word ドキュメントのディレクトリをプログラムで印刷しようとすると問題が発生します。この例では、接頭辞「3_」が付いたファイルのみを印刷しようとしています。問題は、3_ プレフィックスが付いたファイルが 2 つ存在しない限り、ファイルが印刷されないことです。私はこの問題を解決するためにずっと探し回っていました。ファイルの開き方に何か問題があるのでしょうか?これはディレクトリ内に 2 つのファイルがある場合にのみ機能し、その場合は 2 つのファイルのうち 1 つだけが出力されます。

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

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

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

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;
            }
        }

他のヒント

タグを使用してみてください
string[] files = Directory.GetFiles(dir, "3_*.doc");
foreach(string file in files) { }

の代わりに

for (int i = 0; i < filesToCheck.Count(); i++ ) { }

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

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

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

編集

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

ファイル名に「_」を使用しないようにしてください。私はその充電器プリントアウトして前にいくつかの奇妙な癖を見てきました。

scroll top