7

私は別のチームのために、C# で Word Interop を使用してフォルダーを再帰的に調べ、見つかった Word ドキュメントを PDF に変換するユーティリティを作成しました。

私たちが抱えている問題は、ドキュメントが保存される前に今日の日付に更新される日付フィールドで作成されたことです。印刷前にフィールドの更新を無効にする方法を見つけましたが、開いたときにフィールドが更新されないようにする必要があります。

それは可能ですか?C# で修正を行いたいのですが、Word マクロを実行する必要がある場合は可能です。

4

3 に答える 3

4

Microsoft のドキュメントの無限の迷路で説明されているように、フィールド コードをロックできます。たとえば、VBA で、本文に単一の日付フィールドがある場合、

{DATE  \@ "M/d/yyyy h:mm:ss am/pm"  \* MERGEFORMAT }

走れる

ActiveDocument.Fields(1).Locked = True

次に、ドキュメントに変更を加えて保存し、再度開くと、フィールド コードが更新されません。

C# Office Interop を使用した例:

Word.Application wordApp = new Word.Application();
Word.Document wordDoc = wordApp.ActiveDocument;
wordDoc.Fields.Locked = 1; //its apparently an int32 rather than a bool

DocumentOpenイベントにコードを配置できます。イベントをサブスクライブするアドインがあると仮定しています。そうでない場合は、それ自体が戦いになる可能性があるため、明確にしてください。

編集: 私のテストでは、この方法でフィールドをロックするとすべてのフィールドがロックStoryRangesされるため、ヘッダー、フッター、脚注、テキスト ボックスなどでフィールド インスタンスを取得する必要はありません。これは驚くべき扱いです。

于 2013-04-14T15:44:28.347 に答える
1

Interop でそれを行う方法は見つかりませんでしたが、私の会社は Aspose.Words を購入し、Word ドキュメントを TIFF 画像に変換するユーティリティを作成しました。明示的に指示しない限り、Asposeツールはフィールドを更新しません。Aspose で使用したコードのサンプルを次に示します。Word ドキュメントを 1 ページの TIFF 画像に変換する必要があり、多くのオプションをハードコーディングしたことを覚えておいてください。これは、このプロジェクトの単なるユーティリティだったからです。

private static bool ConvertWordToTiff(string inputFilePath, string outputFilePath)
    {
        try
        {
            Document doc = new Document(inputFilePath);

            for (int i = 0; i < doc.PageCount; i++)
            {
                ImageSaveOptions options = new ImageSaveOptions(SaveFormat.Tiff);
                options.PageIndex = i;
                options.PageCount = 1;
                options.TiffCompression = TiffCompression.Lzw;
                options.Resolution = 200;
                options.ImageColorMode = ImageColorMode.BlackAndWhite;

                var extension = Path.GetExtension(outputFilePath);
                var pageNum = String.Format("-{0:000}", (i+1));
                var outputPageFilePath = outputFilePath.Replace(extension, pageNum + extension);

                doc.Save(outputPageFilePath, options);
            }

            return true;
        }
        catch (Exception ex)
        {
            LogError(ex);
            return false;
        }
    }
于 2013-10-25T17:56:24.157 に答える