1

プレースホルダーが置き換えられるテンプレートとして Microsoft Word ドキュメントを使用する必要があります。単純なプレースホルダーの交換には問題なく機能します。

ただし、データベースから取得したデータに応じて行数のテーブルに置き換えるプレースホルダーを追加する必要がある場合、複雑さが生じます。

現在、Microsoft Word テンプレートに置き換える前にデータを生成することにより、C# コードを使用して実行しています。

これに対するより良いアプローチはありますか?または、この要件を満たすために SSRS を使用できますか?

最終結果は、プレースホルダーがデータベースの値に置き換えられた同じ単語文書になるはずです。

4

2 に答える 2

0

ここで説明されている Word ドキュメントでの XML データ バインディングを参照してください。Word XML Data Binding と OpenXML を使用した Word 2007 でのデータ/ビューの分離

基本的に、docx-package 内で配布される XML ファイルにある Word 文書にコンテンツを追加できます。

このMSDN サンプルも役立つ場合があります。

OpenXML を自分で解析するのではなく、Word に組み込まれている既存のテクノロジを使用するため、個人的にはこのアプローチが非常に気に入っています。

于 2013-02-26T11:06:01.773 に答える
0

あなたが使用することができます:

// fill the dt DataTable from the database
System.Data.DataTable dt = new System.Data.DataTable();

// just some test data
int columns = 3;
int rows = 3;
for (int i = 0; i < columns; i++)
{
    dt.Columns.Add();
}
for (int i = 0; i < rows; i++)
{
    dt.Rows.Add(new object[columns]);
}

// replace the placeholder with the table
for (int w = 1; w <= doc.Words.Count; w++)
{
    // check for the placeholder match
    if (doc.Words[w].Text == "PlaceHolder1")
    {
        Table t = doc.Tables.Add(doc.Words[w], dt.Rows.Count, dt.Columns.Count);
        for (int i = 1; i <= t.Rows.Count; i++)
        {
            for (int j = 1; j <= t.Columns.Count; j++)
            {
                // add the 
                t.Cell(i, j).Range.Text = String.Format("PlaceHolder1 row:{0} column: {1}", i, j);
            }
        }
于 2013-02-26T12:06:27.593 に答える