C# で Word 文書を作成するにはどうすればよいですか?[閉まっている]
質問
MS Word 形式でレポートのエクスポートを生成したいプロジェクトがあります。レポートには画像/グラフ、表、テキストが含まれます。これを行うための最良の方法は何ですか?サードパーティのツール?あなたの経験は何ですか?
解決
答えは、アプリケーションがサーバー上で実行されているか、クライアント マシン上で実行されているかによって多少異なります。サーバー上で実行している場合は、既知の問題があるため、XML ベースのオフィス生成形式のいずれかを使用することになります。 サーバー上でオフィス オートメーションを使用する.
ただし、クライアント マシンで作業している場合は、次のいずれかを選択できます。 オフィスオートメーションを使用する または、Microsoft Office 2000 以降でネイティブまたはサービス パックを通じてサポートされている Office Open XML 形式 (以下のリンクを参照) を使用します。ただし、これには表示したい種類のグラフや画像を埋め込むことができない可能性があるという欠点があります。
物事を進めるための最善の方法は、開発にどれだけの時間を投資する必要があるかによって決まります。Office Automation のルートに進む場合は、Google 経由で見つけることができ、非常に簡単に学習できる優れたチュートリアルが多数存在します。ただし、Open Office XML 形式はかなり新しいため、学習曲線が少し高くなるかもしれません。
Office Open XML 情報
- Office オープン XML - http://en.wikipedia.org/wiki/Office_Open_XML
- OpenXML 開発者 - http://openxmldeveloper.org/default.aspx
- Office (2007) オープン XML ファイル形式の紹介 - http://msdn.microsoft.com/en-us/library/aa338205.aspx
他のヒント
DocX無料ライブラリ DocX ドキュメントを作成するためのもので、活発に開発されており、非常に簡単かつ直感的に使用できます。CodePlex が消滅したため、プロジェクトは次の場所に移動しました。 ギットハブ.
私はここ 1 週間ほどをかけて、 Office オープン XML. 。レポートしたい調査データを Microsoft Word で保存するデータベース アプリケーションがあります。実際には、C# で Word 2007 (docx) ファイルを最初から作成できます。Open XML SDK バージョン 2 には、Word ドキュメントを完全に再作成するための C# コードを実際に提供する Document Reflector と呼ばれる優れたアプリケーションが含まれています。コードの一部またはすべてを使用して、変更したいビットをその場で置き換えることができます。SDK に含まれるヘルプ ファイルには、優れたコード サンプルもいくつか含まれています。
サーバー上に Office Interop やその他の Office ソフトウェアは必要ありません。新しい形式は 100% XML です。
代替手段として .RTF の使用を検討しましたか?
テキストだけでなく画像や表の埋め込みもサポートしており、デフォルトで Microsoft Word を使用して開きます。その機能セットはより制限されていますが (高度な書式設定は除外します)、見た目も操作性も高く、Word 文書のように開くこともそう遠くありません。
エンドユーザーはおそらく気付かないでしょう。
見つけた 言葉を並べる 誰もが Office Open XML/*.docx 形式のファイルを開くことができるわけではなく、Word の相互運用性や Word のオートメーションにはバグがある可能性があるため、最善であることが重要です。Aspose Words は、Word 97 以降のほとんどのドキュメント ファイル タイプをサポートします。
有料コンポーネントですが、サポートは充実しています。すでに提案されているように、もう 1 つの代替案は RTF です。
.NET (特に C# または VB.NET) 内で Office Automation を使用して Word ドキュメントを生成するには、次の手順を実行します。
を追加します。 Microsoft.Office.Interop.Word プロジェクトへのアセンブリ参照。パスは \Visual Studio Tools for Office\PIA\Office11\Microsoft.Office.Interop.Word.dll.
ここで見つけることができるMicrosoftコードの例に従ってください: http://support.microsoft.com/kb/316384/en-us.
Schmidty、Web サーバー上で Word ドキュメントを生成したい場合は、それぞれのドキュメントに対してライセンスが必要になります。 クライアント (Web サーバーだけではありません)。最初のこのセクションを参照してください リンク ロブは次のように投稿しました:
「技術的な問題に加えて、ライセンスの問題も考慮する必要があります。現在のライセンス ガイドラインでは、クライアント自体が Office のライセンスを取得していない限り、クライアントの要求に対応するためにサーバー上で Office アプリケーションを使用することはできません。サーバー側オートメーションを使用して、ライセンスのないワークステーションに Office 機能を提供することは、エンド ユーザー使用許諾契約 (EULA) の対象外です。」
ライセンス要件を満たしている場合は、COM Interop を使用する必要があると思います。具体的には、 Office XP プライマリ相互運用アセンブリ.
VSTO (Visual Studio Tools for Office) を確認してください。Word テンプレートを作成し、そこに XML データ アイランドを挿入して、クライアントに送信するのは非常に簡単です。ユーザーが Word でドキュメントを開くと、Word は XML を読み取り、WordML に変換して表示します。VSTO ライブラリの ServerDocument クラスを確認してください。私の経験上、追加のライセンスは必要ありません。
私は、doc および docx 形式をサポートする Syncfusion Backoffice DocIO を使用して成功しました。
以前のリリースでは Word のすべてをサポートしていませんでしたが、リストによると、差し込み印刷のアプローチとして表とテキストを使用してテストしたところ、正常に動作しました。
ただし、画像のインポートについてはわかりません。宣伝ページで http://www.syncfusion.com/products/DocIO/Backoffice/features/default.aspx それは言う
BlockQuote Essential Docioは、ほぼすべての形式で、スカラー画像とベクトル画像の両方をドキュメントに挿入することをサポートしています。サポートされている一般的な画像タイプには、ビットマップ、gif、png、tiff などがあります。
したがって、検討する価値があります。
他の人が述べたように、RTF ドキュメントを構築できると、.net 用の優れた RTF ライブラリがいくつかあります。 http://www.codeproject.com/KB/string/nrtftree.aspx
私はこの問題に直面し、このための小さなライブラリを作成しました。いくつかのプロジェクトで使用されたため、公開することにしました。無料で非常にシンプルですが、作業に役立つと確信しています。Office Open XML ライブラリを呼び出します。 http://invoke.co.nz/products/docx.aspx.
を書きました Open XML WordprocessingML ドキュメント生成に関するブログ投稿シリーズ. 。私のアプローチは、コンテンツ コントロールを含むテンプレート ドキュメントを作成し、各コンテンツ コントロールに、ドキュメント生成プロセスを駆動するデータを含む XML ドキュメントからコンテンツを取得する方法を定義する XPath 式を記述することです。コードは無料で、次のライセンスに基づいてライセンスされています。 Microsoft 相互ライセンス (Ms-RL). 。同じブログ投稿シリーズで、コンテンツ コントロールに C# コードを記述するアプローチも検討します。次に、ドキュメント生成プロセスがテンプレート ドキュメントを処理し、目的のドキュメントを生成する C# プログラムを生成します。このアプローチの利点の 1 つは、以下を使用できることです。 どれでも データ ソースは、ドキュメント生成プロセスのデータ ソースとして使用されます。このコードは、Microsoft 相互ライセンスにも基づいてライセンス供与されています。
私は現在、まさにこれと同じことを行っています。
ドキュメントがそれほど大きくなく、画像などが含まれていない場合は、#MergeFields# を含む RTF として保存し、単にコンテンツに置き換えて、結果を RTF としてユーザーに送信します。
画像や動的に挿入された画像を含む大きなドキュメントの場合は、最初の Word ドキュメントを #MergeFields# を含む単一の Web ページ *.mht ファイルとして保存します。その後、上記と同じことを行います。これを使用すると、いくつかの基本的な Html テーブル タグを使用して DataTable を簡単にレンダリングし、#MergeFields# の 1 つをテーブル全体に置き換えることができます。
画像をサーバーに保存し、URL をドキュメントに埋め込むこともできます。
興味深いことに、新しい Office 2007 ファイル形式は実際には zip ファイルです。拡張子の名前を .zip に変更すると、ファイルを開いて内容を確認できるようになります。これは、単純な C# zip ライブラリを使用して画像などのコンテンツを切り替えられる必要があることを意味します。
@デール・ラガン:これは Office 2003 XML 形式では機能しますが、移植性はありません (たとえば、.doc または .docx ファイルのように)。
これらの読み取り/書き込みを行うには、Word オブジェクト ライブラリ ActiveX コントロールを使用する必要があります。
@ダニー・スマーフ:実際、この記事では、Rob が回答した Office Open XML 形式になるものについて説明します。今後は、投稿するリンクが古くならないように、より注意を払うつもりです。実際に WordML (当時はそう呼ばれていました) で検索してみました。
私は、Office Open XML 形式が最善の方法だと信じています。
リブレオフィス API を介したヘッドレス インタラクションもサポートしています。残念ながら、現時点ではこの機能に関する情報はまだあまりありません。:(
Word ドキュメント ジェネレーターを使用することもできます。クライアント側またはサーバー側の展開に使用できます。プロジェクトの説明から:
WordDocumentGeneratorは、Visual Studio 2010およびOpen XML 2.0 SDKを使用して、テンプレートから単語ドキュメントを生成するユーティリティです。WordDocumentGeneratorは、最小コードの変更を使用した事前定義されたテンプレートに基づいて、再洗浄できないものとリフレッシュ可能の両方の単語ドキュメントを生成するのに役立ちます。コンテンツコントロールは、ドキュメント生成のプレースホルダーとして使用されます。Word 2007 および Word 2010 をサポートします。
それをつかむ: http://worddocgenerator.codeplex.com/
SDKをダウンロード: http://www.microsoft.com/en-us/download/details.aspx?id=5124
別の代替案は、 ウィンドワード・ドクゲン (免責事項 - 私は創設者です)。Windward を使用すると、画像、表、グラフ、ゲージ、その他必要なものを含むテンプレートを Word でデザインできます。XML または SQL データソースからのデータが挿入される場所にタグを設定できます (forEach ループ、インポートなどの機能を含む)。次に、レポートを DOCX、PDF、HTML などに生成します。