用复杂的表数据替换dotx占位符

时间:2013-02-26 10:51:59

标签: c#

我们要求使用Microsoft Word文档作为模板,其中的占位符将被替换。它适用于简单的占位器更换。

然而,当我们需要添加place-holder时,复杂性就会出现,而place-holder将由具有行数的表替换,具体取决于从数据库中检索的数据。

目前,我们正在使用C#代码通过在替换为Microsoft Word模板之前生成数据来实现此目的。

有没有更好的方法呢?或者我们可以使用SSRS来满足这一要求吗?

最终结果应该是相同的word文档,其占位符替换为数据库中的值。

2 个答案:

答案 0 :(得分:0)

查看此处描述的Word文档中的XML数据绑定Data/View Separation in Word 2007 using Word XML Data Binding and OpenXML

基本上,您可以将内容添加到Word文档中,该文档位于docx-package中分发的XML文件中。

This MSDN示例也可能会有所帮助。

我个人非常喜欢这种方法,因为它使用了Word中内置的现有技术,而不是自己解析OpenXML。

答案 1 :(得分: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);
            }
        }