1

私がやろうとしているのは、Word文書のフォルダーを実行し、Wordのtiffプリンターを使用してそれらを.tifファイルに変換することです。問題は、ドキュメントに遭遇した場合、パスワードを要求するプロンプトを表示せずにドキュメントをスキップする必要があり、すべてバックグラウンドに残る必要があることです。

Document クラスに HasPassword プロパティがあることがわかりますが、ドキュメントを開く前に確認することはできません。

word.Documents.OpenNoRepairDialog(@"c:\testfolder\testDocWithPw.docx", ReadOnly: true);

また、パスワードに空のパラメーターを指定して、エラーコードをキャッチしようとしました。しかし、そこにたどり着くには、パスワードを要求するプロンプトに対してキャンセルを押す必要があります。

Application word = new Application();
word.DisplayAlerts = WdAlertLevel.wdAlertsNone;
try
{
    word.Documents.OpenNoRepairDialog(@"c:\testfolder\Doc2.docx", ReadOnly: true, PasswordDocument: "");
    word.ActivePrinter = "TIFF Image Printer 10.0";
    Doc.PrintOut(); //printout untested for now
    Doc.Close(false);
}
catch (System.Runtime.InteropServices.COMException ex)
{
    if (ex.ErrorCode == 0x12345678)
    {
        //skip file and log file name and position for review
    }
}

事前にThx

編集:パスワードに間違ったパスワードを入力しようとしましたが、エラーコード部分を使用できました。パスワードがない場合、パスワードを指定してもファイルが開かれます。だから、それは基本的に私が望むことをします。最悪の場合、開いてはならない文書に誰かのパスワードを付けていると推測した場合、パスワードが適切に設定されていない文書にアクセスできない場合は、hasPassword プロパティを確認できます。

4

2 に答える 2

5

私はこれに自分で答えるので、答えのない質問がぶら下がることはありません。解決策は簡単で、パスワードを開くときにパスワードを指定するだけです。空の文字列を残す場合は、質問をしないのと同じです。次に、com例外をキャッチして、必要に応じて処理できます。

Application word = new Application();
word.DisplayAlerts = WdAlertLevel.wdAlertsNone;
try
{
    word.Documents.OpenNoRepairDialog(@"c:\testfolder\Doc2.docx", ReadOnly: true, PasswordDocument: "RandomButSurelyNotRightPassword");
    word.ActivePrinter = "TIFF Image Printer 10.0";
    Doc.PrintOut(); //printout untested for now
    Doc.Close(false);
}
catch (System.Runtime.InteropServices.COMException ex)
{
    if (ex.ErrorCode == 0x12345678)
    {
        //skip file and log file name and position for review
    }
}
于 2012-12-11T15:44:57.587 に答える