如何添加多行以及如何使用 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++;
        }