MS Word 形式でレポートをエクスポートしたいプロジェクトがあります。レポートには、画像/グラフ、表、およびテキストが含まれます。これを行う最善の方法は何ですか?サードパーティのツール? あなたの経験は何ですか?
17 に答える
答えは、アプリケーションがサーバーで実行されているか、クライアント マシンで実行されているかによって少し異なります。サーバー上で実行している場合は、Office オートメーションをサーバー上で使用する際に既知の問題があるため、XML ベースの Office 生成形式のいずれかを使用することをお勧めします。
ただし、クライアント マシンで作業している場合は、Office オートメーションを使用するか、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 が死んでいるので、プロジェクトはgithubに移動しました。
私は先週かそこらでOfficeOpenXMLの知識を習得しました。MicrosoftWordでレポートしたい調査データを保存するデータベースアプリケーションがあります。実際には、C#でWord 2007(docx)ファイルを最初から作成できます。Open XML SDKバージョン2には、Wordドキュメントを完全に再作成するためのC#コードを実際に提供するDocumentReflectorと呼ばれるクールなアプリケーションが含まれています。コードの一部またはすべてを使用して、変更したいビットをその場で置き換えることができます。SDKに含まれているヘルプファイルには、いくつかの優れたコードサンプルも含まれています。
サーバー上にOfficeInteropやその他のOfficeソフトウェアは必要ありません。新しい形式は100%XMLです。
代わりに .RTF を使用することを検討しましたか?
画像や表、テキストの埋め込みをサポートし、デフォルトで Microsoft Word を使用して開きます。機能セットはより制限されていますが (高度な書式設定は除外されます)、Word 文書のように見えて開くものはそれほど遠くありません。
エンド ユーザーはおそらく気付かないでしょう。
誰もが Office Open XML/*.docx 形式のファイルを開くことができるわけではなく、Word の相互運用性と Word の自動化にはバグがある可能性があるため、Aspose Wordsが最適であることがわかりました。Aspose Words は、Word 97 以降のほとんどのドキュメント ファイル タイプをサポートしています。
有料のコンポーネントですが、優れたサポートがあります。すでに提案されている他の代替手段は RTF です。
.NET 内、特に C# または VB.NET で Office オートメーションを使用して Word ドキュメントを生成するには:
Microsoft.Office.Interop.Wordアセンブリ参照をプロジェクトに追加します。パスは\Visual Studio Tools for Office\PIA\Office11\Microsoft.Office.Interop.Word.dllです。
http://support.microsoft.com/kb/316384/en-usにある Microsoft コードの例に従ってください。
Schmidty さん、Web サーバーで Word 文書を生成したい場合は、 (Web サーバーだけでなく)クライアントごとにライセンスが必要になります。ロブが投稿した最初のリンクのこのセクションを参照してください。
「技術的な問題に加えて、ライセンスの問題も考慮する必要があります。現在のライセンス ガイドラインでは、クライアント自身が Office のライセンス コピーを持っていない限り、サーバー上で Office アプリケーションを使用してクライアントの要求にサービスを提供することはできません。サーバー側のオートメーションを使用して Office の機能を提供するライセンスのないワークステーションは、エンド ユーザー ライセンス契約 (EULA) の対象外です。」
ライセンス要件を満たしている場合は、COM Interop を使用する必要があると思います。具体的には、Office XP Primary Interop Assembliesです。
OpenXMLWordprocessingMLドキュメントの生成に関するブログ投稿シリーズを作成しました。私のアプローチは、コンテンツコントロールを含むテンプレートドキュメントを作成し、各コンテンツコントロールで、ドキュメント生成プロセスを駆動するデータを含むXMLドキュメントからコンテンツを取得する方法を定義するXPath式を作成することです。コードは無料で、Microsoft Reciprocal License(Ms-RL)の下でライセンスされています。同じブログ投稿シリーズでは、コンテンツコントロールでC#コードを記述するアプローチについても説明します。次に、ドキュメント生成プロセスはテンプレートドキュメントを処理し、目的のドキュメントを生成するC#プログラムを生成します。このアプローチの利点の1つは、ドキュメント生成プロセスのデータソースとしてのデータソース。そのコードは、MicrosoftReciprocalLicenseの下でもライセンスされています。
docおよびdocx形式をサポートするSyncfusionBackofficeDocIOを使用して成功しました。
以前のリリースでは、すべてを単語でサポートしていませんでしたが、リストによると、メールマージアプローチとしてテーブルとテキストでテストし、正常に機能しました。
ただし、画像のインポートについてはよくわかりません。彼らの宣伝文のページhttp://www.syncfusion.com/products/DocIO/Backoffice/features/default.aspxにそれは言います
Blockquote Essential DocIOは、ほぼすべての形式で、スカラー画像とベクター画像の両方をドキュメントに挿入することをサポートしています。Bitmap、gif、png、tiffは、サポートされている一般的な画像タイプの一部です。
したがって、検討する価値があります。
他の人がRTFドキュメントを作成できると述べているように、http://www.codeproject.com/KB/string/nrtftree.aspxのような.net用の優れたRTFライブラリがいくつかあります。
VSTO (Visual Studio Tools for Office) を確認してください。Word テンプレートを作成し、そこに xml データ アイランドを挿入して、クライアントに送信するのは非常に簡単です。ユーザーが Word でドキュメントを開くと、Word は xml を読み取り、それを WordML に変換してレンダリングします。VSTO ライブラリの ServerDocument クラスを見てください。私の経験から、追加のライセンスは必要ありません。
私はこの問題に直面し、このための小さなライブラリを作成しました。いくつかのプロジェクトで使用された後、公開することにしました。それは無料で非常にシンプルですが、あなたの仕事に役立つと確信しています. Office Open XML ライブラリ ( http://invoke.co.nz/products/docx.aspx ) を呼び出します。
私は現在、これとまったく同じことをしています。
ドキュメントがそれほど大きくなく、画像などが含まれていない場合は、#MergeFields#を含むRTFとして保存し、コンテンツに置き換えるだけで、結果をRTFとしてユーザーに送信します。
画像や動的に挿入された画像など、より大きなドキュメントの場合は、最初のWordドキュメントを#MergeFields#を含む単一のWebページ*.mhtファイルとして再度保存します。次に、上記と同じことを行います。これを使用して、いくつかの基本的なHtmlテーブルタグを使用してDataTableを簡単にレンダリングし、#MergeFields#の1つをテーブル全体に置き換えることができます。
画像をサーバーに保存し、URLをドキュメントに埋め込むこともできます。
興味深いことに、新しいOffice 2007ファイル形式は実際にはzipファイルです。拡張子を.zipに変更すると、それらを開いて内容を確認できます。これは、単純なC#zipライブラリを使用して、画像などのコンテンツを切り替えられるようにする必要があることを意味します。
Word文書ジェネレーターを使用することもできます。クライアント側またはサーバー側の展開に使用できます。プロジェクトの説明から:
WordDocumentGeneratorは、VisualStudio2010とOpenXML2.0SDKを使用してテンプレートからWord文書を生成するためのユーティリティです。WordDocumentGeneratorは、最小限のコード変更を使用して、事前定義されたテンプレートに基づいて、更新不可と更新可能の両方のWord文書を生成するのに役立ちます。コンテンツコントロールは、ドキュメント生成のプレースホルダーとして使用されます。Word2007およびWord2010をサポートします。
それをつかむ:http ://worddocgenerator.codeplex.com/
SDKのダウンロード:http ://www.microsoft.com/en-us/download/details.aspx?id = 5124
LibreOfficeは、API を介したヘッドレス インタラクションもサポートしています。残念ながら、現在、この機能に関する情報はまだあまりありません.. :(
@Dale Ragan: Office 2003 XML 形式では機能しますが、移植性はありません (たとえば、.doc または .docx ファイルのように)。
それらを読み書きするには、Word Object Library ActiveX コントロールを使用する必要があります。
@Danny Smurf: 実際、この記事では、Rob が回答した Office Open XML 形式がどうなるかについて説明しています。廃止されていないことを確認するために、今のところ投稿するリンクにもっと注意を払います。実際に、当時の名前である WordML で検索しました。
Office Open XML 形式が最適な方法だと思います。
もう1つの選択肢は、Windward Docgenです(免責事項-私は創設者です)。Windwardを使用すると、画像、表、グラフ、ゲージなど、必要なものをすべてWordでテンプレートをデザインできます。XMLまたはSQLデータソースからのデータが挿入されるタグを設定できます(forEachループ、インポートなどの機能を含む)。次に、DOCX、PDF、HTMLなどへのレポートを生成します。