如何添加多行以及如何使用 c# 替换 spire Doc 中的值?
How to add multiple rows and how to replace value in spire Doc using c#?
我有 doc 文件,我想替换 table 中的字符串值,并在 doc 文件中添加行并将其转换为 PDF。
例子。我在数据 table 中有 5 条记录,然后在现有 spire 文档中添加 5 行记录并替换值。
请检查随附的 doc 文件照片。
我建议您使用邮件合并,这样会容易得多。
首先,通过插入合并字段来修改模板 word 文档,如下所示:
其次,参考下面的示例代码将数据table中的数据合并到单词table中:
using System.Collections;
using System.Collections.Generic;
using System.Data;
using Spire.Doc;
namespace Sample
{
class Program
{
static void Main(string[] args)
{
Document document = new Document();
//load word document
document.LoadFromFile("template.docx");
//convert datatable to list
DataTable dt = GetDataTable();
DataSet dsTmp = new DataSet();
dsTmp.Tables.Add(dt);
List<DictionaryEntry> list = new List<DictionaryEntry>();
DictionaryEntry dictionaryEntry = new DictionaryEntry("Table", string.Empty);
list.Add(dictionaryEntry);
//merge data in list to word table
document.MailMerge.ExecuteWidthNestedRegion(dsTmp, list);
//save the result document to pdf
//document.SaveToFile("Result.docx", FileFormat.Docx2013);
document.SaveToFile("Result.pdf", FileFormat.PDF);
}
public static DataTable GetDataTable()
{
DataTable dt = new DataTable();
dt.TableName = "Table";
dt.Columns.Add("srno", typeof(string));
dt.Columns.Add("particulars", typeof(int));
dt.Columns.Add("finish", typeof(int));
dt.Columns.Add("thickness", typeof(string));
dt.Columns.Add("size", typeof(string));
dt.Columns.Add("chargeable", typeof(int));
dt.Columns.Add("unit", typeof(int));
dt.Columns.Add("rateUnit", typeof(string));
dt.Columns.Add("total", typeof(string));
DataRow dr1 = dt.NewRow();
dr1["srno"] = "A";
dr1["particulars"] = "20";
dr1["finish"] = "1";
dr1["thickness"] = "00";
dr1["size"] = "A";
dr1["chargeable"] = "20";
dr1["unit"] = "1";
dr1["rateUnit"] = "00";
dr1["total"] = "A";
dt.Rows.Add(dr1);
DataRow dr2 = dt.NewRow();
dr2["srno"] = "B";
dr2["particulars"] = "20";
dr2["finish"] = "1";
dr2["thickness"] = "00";
dr2["size"] = "B";
dr2["chargeable"] = "20";
dr2["unit"] = "1";
dr2["rateUnit"] = "00";
dr2["total"] = "B";
dt.Rows.Add(dr2);
DataRow dr3 = dt.NewRow();
dr3["srno"] = "C";
dr3["particulars"] = "20";
dr3["finish"] = "1";
dr3["thickness"] = "00";
dr3["size"] = "C";
dr3["chargeable"] = "20";
dr3["unit"] = "1";
dr3["rateUnit"] = "00";
dr3["total"] = "C";
dt.Rows.Add(dr3);
return dt;
}
}
}
如果您不想使用邮件合并,您需要使用 table.AddRow();
向单词 table 添加行,然后将数据 table 值分配给单词 table循环(table.Rows[i].Cells[j].AddParagraph().AppendText(dt.Rows[i][j].ToString());
).
经过一番努力,我得到了解决方案。您可以在代码下方查看。
Table table = doc.Sections[0].Tables[0] as Table;
foreach (var item in Qu.Product)
{
ArrayList arrList = new ArrayList();
arrList.Add(a);
arrList.Add(item.Parti);
arrList.Add(item.Fin);
arrList.Add(item.Thick);
arrList.Add(item.Size);
arrList.Add(item.Charge);
arrList.Add(item.Unit);
arrList.Add(item.RateUnit);
arrList.Add(item.Total);
TableRow Trow = table.AddRow();
for (int row = 1; row <= 1; row++)
{
for (int col = 0; col < 9; col++)
{
Trow.Cells[col].AddParagraph().AppendText(arrList[col].ToString());
}
}
a++;
}
我有 doc 文件,我想替换 table 中的字符串值,并在 doc 文件中添加行并将其转换为 PDF。
例子。我在数据 table 中有 5 条记录,然后在现有 spire 文档中添加 5 行记录并替换值。
请检查随附的 doc 文件照片。
我建议您使用邮件合并,这样会容易得多。
首先,通过插入合并字段来修改模板 word 文档,如下所示:
其次,参考下面的示例代码将数据table中的数据合并到单词table中:
using System.Collections;
using System.Collections.Generic;
using System.Data;
using Spire.Doc;
namespace Sample
{
class Program
{
static void Main(string[] args)
{
Document document = new Document();
//load word document
document.LoadFromFile("template.docx");
//convert datatable to list
DataTable dt = GetDataTable();
DataSet dsTmp = new DataSet();
dsTmp.Tables.Add(dt);
List<DictionaryEntry> list = new List<DictionaryEntry>();
DictionaryEntry dictionaryEntry = new DictionaryEntry("Table", string.Empty);
list.Add(dictionaryEntry);
//merge data in list to word table
document.MailMerge.ExecuteWidthNestedRegion(dsTmp, list);
//save the result document to pdf
//document.SaveToFile("Result.docx", FileFormat.Docx2013);
document.SaveToFile("Result.pdf", FileFormat.PDF);
}
public static DataTable GetDataTable()
{
DataTable dt = new DataTable();
dt.TableName = "Table";
dt.Columns.Add("srno", typeof(string));
dt.Columns.Add("particulars", typeof(int));
dt.Columns.Add("finish", typeof(int));
dt.Columns.Add("thickness", typeof(string));
dt.Columns.Add("size", typeof(string));
dt.Columns.Add("chargeable", typeof(int));
dt.Columns.Add("unit", typeof(int));
dt.Columns.Add("rateUnit", typeof(string));
dt.Columns.Add("total", typeof(string));
DataRow dr1 = dt.NewRow();
dr1["srno"] = "A";
dr1["particulars"] = "20";
dr1["finish"] = "1";
dr1["thickness"] = "00";
dr1["size"] = "A";
dr1["chargeable"] = "20";
dr1["unit"] = "1";
dr1["rateUnit"] = "00";
dr1["total"] = "A";
dt.Rows.Add(dr1);
DataRow dr2 = dt.NewRow();
dr2["srno"] = "B";
dr2["particulars"] = "20";
dr2["finish"] = "1";
dr2["thickness"] = "00";
dr2["size"] = "B";
dr2["chargeable"] = "20";
dr2["unit"] = "1";
dr2["rateUnit"] = "00";
dr2["total"] = "B";
dt.Rows.Add(dr2);
DataRow dr3 = dt.NewRow();
dr3["srno"] = "C";
dr3["particulars"] = "20";
dr3["finish"] = "1";
dr3["thickness"] = "00";
dr3["size"] = "C";
dr3["chargeable"] = "20";
dr3["unit"] = "1";
dr3["rateUnit"] = "00";
dr3["total"] = "C";
dt.Rows.Add(dr3);
return dt;
}
}
}
如果您不想使用邮件合并,您需要使用 table.AddRow();
向单词 table 添加行,然后将数据 table 值分配给单词 table循环(table.Rows[i].Cells[j].AddParagraph().AppendText(dt.Rows[i][j].ToString());
).
经过一番努力,我得到了解决方案。您可以在代码下方查看。
Table table = doc.Sections[0].Tables[0] as Table;
foreach (var item in Qu.Product)
{
ArrayList arrList = new ArrayList();
arrList.Add(a);
arrList.Add(item.Parti);
arrList.Add(item.Fin);
arrList.Add(item.Thick);
arrList.Add(item.Size);
arrList.Add(item.Charge);
arrList.Add(item.Unit);
arrList.Add(item.RateUnit);
arrList.Add(item.Total);
TableRow Trow = table.AddRow();
for (int row = 1; row <= 1; row++)
{
for (int col = 0; col < 9; col++)
{
Trow.Cells[col].AddParagraph().AppendText(arrList[col].ToString());
}
}
a++;
}