1

.docxドキュメント(Word 2010)のプレースホルダーをMySQLデータベースからのデータに置き換えるための最良のアプローチは何でしょうか?

サーバー側の言語を使用してファイルを開き、プレースホルダーごとに文字列を置き換えることはできますか?

利用可能な既存のツール/ライブラリはありますか?

ありがとう

4

9 に答える 9

3

**開示:私はdocx4jプロジェクトを主導しています**

利用可能な既存のツール/ライブラリのヒープがあります!

はい、文字列の置換を行うことができますが、Wordが文字列を実行間で分割している可能性があるため、これは脆弱なアプローチです。

MERGEFIELD、またはコンテンツ制御データバインディングを使用できます。

docx4jは3つのアプローチすべてをサポートしますが、コンテンツ制御データバインディングが最も強力です。

特に考慮すべきことの1つは、「リピート」です。MySQLテーブルの一致する行ごとに、Wordでテーブルの行を言いたい場合は、これを実現する方法が必要です。

docx4jは、テーブル行の周りの「繰り返し」コンテンツコントロールを使用してこれを行います。どちらのソリューションを選択しても、繰り返しを処理できることを事前に確認します。

于 2012-09-05T22:11:25.120 に答える
3

開示:私はInvantiveで働いています。

Invantive Composition(http://www.invantive.com/products/invantive-composition)を使用すると、Wordドキュメント(レター、法的訴え、保険ポリシー)にデータベース(IBM DB2、Oracle、MySQL、Teradata、SQL)のデータを入力できます。サーバー)そして、手動で内容を自由に完全に変更します。これは、中央のWebサービスとクエリを使用したモデルを介してデータベースにアクセスする実際のMicrosoft Wordエンドユーザー(テンプレートを作成するユーザーとテンプレートを使用するユーザーの両方)を対象としています。Invantive Compositionを使用すると、データとレイアウトのネストされた繰り返しグループが可能になります。クリックワンスを使用してMicrosoftWordに統合します。

過去には、私は個人的にJasperReports(http://community.jaspersoft.com/project/jasperreports-library)を使用して、JasperReportsのRTF出力ターゲットを使用して文字を生成していました。これは無料で、出力を数語以上編集したくない場合、およびJava/SQL開発スキルを持っている限り正常に機能します。Invantive Compositionと同じように、多数の異なるレポートに対して正常に機能します。

環境を完全に制御できる限り、RTFを中間言語として使用することも検討できます(エンドユーザー向けではなく、実際の開発者のみ)。ドキュメントをRTFとして保存し、置き換え可能にする必要のあるテキストの一部を置き換え、パラメーターを受け入れて結果のRTFをダンプするWebサービスを作成します。より複雑なテーブルを生成するには時間がかかります(テーブルは、RTF仕様が作成された後、明らかに人類によって発明されたものです:-)このアプローチは、非常に限られた数のテンプレートでのみ機能し、開発者が十分な時間を利用できる場合にのみ機能します。実行され、安定しました。

独立したレビューアとして、XMLテンプレートが使用されたケースも見ましたが、結果はJasperReportsほど良くありませんでした。

于 2013-10-24T07:36:46.907 に答える
2

PHPを使用したい場合、利用可能な最も完全なソリューションはPHPDocXです。

チュートリアルで、プレースホルダー変数を任意のデータソース(MySQL DBなど)からのデータで置き換える方法を確認できます。

特に、テーブルの行に不特定の数のエントリを入力したり、アプリケーションに供給されたデータに応じてWordドキュメントのブロック全体を削除したり、動的なWordチャートを作成したりできます。

利用可能なDEMOをチェックして、単純ですが非常にわかりやすい例を確認できます(その内部動作はチュートリアルセクションで説明されています)。

于 2012-09-05T19:54:33.647 に答える
1

Open Open XML SDKを使用して、このようにプレースホルダーを置き換えることができます。

于 2012-09-05T17:37:29.973 に答える
1

開示:私はdocxgenjsプロジェクトを主導しています

すべてを自分でコーディングする必要はないと思います。そのため、docx用にMustacheのようなテンプレートエンジンを作成しました。

デモ:

http://javascript-ninja.fr/docxgenjs/examples/demo.html

レポ

https://github.com/edi9999/docxgenjs

これはJSベースであり、クライアント側とサーバー側で機能します。

于 2013-09-16T12:29:43.670 に答える
0

はい、サーバー側の言語を使用してそれを行うことができます。ApachePOIを確認してください。

http://poi.apache.org

于 2012-09-05T16:18:28.167 に答える
0

こんにちは私は上記の特にコメントを読みました、そしてIvantiveは印象的です-しかし私が必要とした解決策ははるかに簡単でした。WordでSelection.Range.InsertDatabaseを使用して、Accessデータベース、Excelスプレッドシート、または別のWord文書からレコードをフェッチします。アクセスソリューションを使用すると、フェッチするレコードのレイアウトを選択し、フィールド(IDなど)に基づいて特定のレコードのみをフェッチすることができます。上記の単語をグーグルで検索すると、MSガイダンスとVBスクリプトの例が表示されます。ほんの数分でうまくいきました。これで、dbaseから必要なIDをユーザーに尋ねるVBスクリプトを探して、完了です。

于 2013-12-20T11:59:30.947 に答える
0

これは、Javaオブジェクトとのマージフィールドを持つdocxテンプレートを使用します(オブジェクトには、mysqlまたはその他のソースからロードした情報が含まれています)。xdocレポートはJava言語用のプロジェクトであり、プロジェクトのホームページはhttps://code.google.com/p/xdocreport/です。

于 2014-04-11T02:34:18.650 に答える
0

*開示:templ4docxプロジェクトを作成します*

こんにちは

Maven中央リポジトリにあるtempl4docxjavaライブラリを使用できるため、Mavenの依存関係に追加するだけです。

<dependency>
    <groupId>pl.jsolve</groupId>
    <artifactId>templ4docx</artifactId>
    <version>2.0.0</version>
</dependency>

使用例:

    Docx docx = new Docx("E:\\template.docx");
    Variables variables = new Variables();
    variables.addTextVariable(new TextVariable("${firstName}", "John"));
    variables.addTextVariable(new TextVariable("${lastName}", "Sky"));
    docx.fillTemplate(variables);
    docx.save("E:\\filledTemplate.docx");

詳細については、http://jsolve.github.io/java/templ4docx/をご覧ください。

于 2015-07-14T05:39:25.940 に答える