我們有要求將Microsoft Word文檔用作替換佔位符的模板。它適用於簡單的放置者更換。將dotx佔位符替換爲複雜的表格數據
但是,當我們需要添加一個佔位符時,它會被表格替換爲行數,這取決於從數據庫中檢索的數據。
目前我們正在使用C#代碼,在替換到Microsoft Word模板之前生成數據。
有沒有更好的方法呢?或者我們可以使用SSRS來滿足這個要求嗎?
最終結果應該是同一個文檔,其佔位符由數據庫中的值替換。
我們有要求將Microsoft Word文檔用作替換佔位符的模板。它適用於簡單的放置者更換。將dotx佔位符替換爲複雜的表格數據
但是,當我們需要添加一個佔位符時,它會被表格替換爲行數,這取決於從數據庫中檢索的數據。
目前我們正在使用C#代碼,在替換到Microsoft Word模板之前生成數據。
有沒有更好的方法呢?或者我們可以使用SSRS來滿足這個要求嗎?
最終結果應該是同一個文檔,其佔位符由數據庫中的值替換。
這裏Data/View Separation in Word 2007 using Word XML Data Binding and OpenXML
主要描述一下XML數據在Word文檔中綁定,可以將內容添加到其位於DOCX封裝內分佈的XML文件的Word文檔。
This MSDN示例可能也有幫助。
就我個人而言,我非常喜歡這種方法,因爲它使用了內置於Word中的現有技術,而不是自己解析OpenXML。
你可以使用:
// 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);
}
}