2

Visual Studio 2005 の .NET 2.0 で C# で記述された大量のコードを継承しました。バックエンド データベースは MS SQL Server 2000 です。コードを Visual Studio 2010 の .NET 4.0 で C# に移行し、コンパイルしてビルドできます。問題は、古いコードが Microsoft.Interop.Office.Word ライブラリを使用して、差し込み印刷とマクロ埋め込みテンプレートを使用してサーバー側のレポートを生成できることです。Visual Studio 2010 はサーバー側の VBA または C# MS Word アプリケーションの作業をサポートしていないことがわかりました。Open XML 2.0 をダウンロードしました。ドキュメンテーションはイライラする以上のものです。また、ウェブ上で見つけた無数の投稿は、ゼロからドキュメントを作成することについて述べており、メールのマージや .dotm ファイルで有効なマクロを実行することなどについてはほとんど言及しておらず、それらのほとんどは Open XML 1.0 を扱っています。

MS Word で .dotx ファイルを .xml ファイルに変換し、C# と Open XML API を使用してその .xml ファイルをロードし、データベースから取得した変数データを埋め込むことはできますか? レポートが実行されるたびに既存の .xml ファイル (つまり 30 ページのレポート) をコードで動的に作成するのは、非常にクレイジーに思えます。何か不足していますか?

誰かがこれを成功させた場合、C# コードの例は非常に役に立ちます。ありがとう、エミリー

4

1 に答える 1

2

非常に単純な検索/置換メソッドを試すことができます。

  1. テンプレートを .docx ファイルとして作成し、サーバーに保存します
  2. すべての差し込み印刷フィールドを、見つけやすく解析しやすいプレースホルダーに変更します。これらのプレースホルダーは、通常はドキュメントに表示されず、XML エンコードを必要としません。例: {{FirstName}}.
  3. 生成するドキュメントごとに新しい空の .docx (zip) ファイルを作成します
  4. テンプレート .docx ファイル内から各ファイルを読み取る
  5. ソースファイルを読みながら、必要に応じてトークンを検索して置き換えます
  6. ファイルをクライアントに送信

私は自分で WordML を扱ったことがないので、上記の機能を妨げる落とし穴があるかどうかはわかりませんが、Open XML と SpreadsheetML の使用に関する私の理解に基づいて、機能するはずです。

OpenXML の操作は、Office 相互運用よりも複雑です。Office Interop API は Office UI に非常に近く、親しみやすく使いやすいものでした。Open XML API は、コア XML の非常に軽量なラッパーであり、XML を直接処理する場合とほとんど同じです。まったく同じ自動慣れがなければ、より複雑です。

ただし、OpenXML はオフィスの相互運用性よりもはるかに優れています。Office の相互運用性は、サーバーでの使用において決して安全ではありません。これは、古い時限爆弾を取り除く良い機会と考えてください。

于 2011-01-20T04:12:04.580 に答える