使用 OpenXML 向 docx 文件中的 table 添加多行
Adding multiple rows to a table in docx files with OpenXML
我正在使用 TemplateEngine.Docx,用于在 Visual Studio 中为 C# 生成 Word docx 的模板引擎。基本上,我正在尝试使用 for 循环将多行添加到已编辑的 word 文档中的 table。但是,当我循环遍历 if 语句时,它只会重写刚刚读取的数据。这是我的代码:
if (fieldName == "examrubric")
{
for (; ; )
{
Console.WriteLine("To enter a row to the tabel type 'yes'\n");
string choice = Console.ReadLine();
if (choice == "yes")
{
Console.WriteLine("Enter a value for the question number:\n");
string qnum = Console.ReadLine();
Console.WriteLine("Enter a value for what the question is out of:\n");
string score = Console.ReadLine();
Console.WriteLine("Enter a value for how much was scored:\n");
string qscore = Console.ReadLine();
Console.WriteLine("Enter a value for score:\n");
string score2 = Console.ReadLine();
Console.WriteLine("Enter the total mark:\n");
string total = Console.ReadLine();
valuesToFill = new Content(
new TableContent("examrubric")
.AddRow(
new FieldContent("qnum", qnum),
new FieldContent("score", score),
new FieldContent("qscore", qscore),
new FieldContent("score2", score2),
new FieldContent("total", total)));
}
else
{
break;
}
}
}
您可以试试下面的代码,在循环中将数据写入docx文件,避免重写数据。
static void Main(string[] args)
{
File.Copy("test1.docx", "OutputDocument.docx");
Console.WriteLine("To enter a row to the tabel type 'yes'\n");
string choice = Console.ReadLine();
Content valuesToFill = new Content(new TableContent("Team Members Table"));
for (int i = 0; i < 2; i++)
{
if (choice == "yes")
{
Console.WriteLine("Enter a value for the Name:\n");
string name = Console.ReadLine();
Console.WriteLine("Enter a value for the Role:\n");
string role = Console.ReadLine();
valuesToFill.Tables.First().AddRow(
new FieldContent("Name", name),
new FieldContent("Role", role)) ;
}
}
using (var outputDocument = new TemplateProcessor("OutputDocument.docx").SetRemoveContentControls(true))
{
outputDocument.FillContent(valuesToFill);
outputDocument.SaveChanges();
}
}
测试结果:
我正在使用 TemplateEngine.Docx,用于在 Visual Studio 中为 C# 生成 Word docx 的模板引擎。基本上,我正在尝试使用 for 循环将多行添加到已编辑的 word 文档中的 table。但是,当我循环遍历 if 语句时,它只会重写刚刚读取的数据。这是我的代码:
if (fieldName == "examrubric")
{
for (; ; )
{
Console.WriteLine("To enter a row to the tabel type 'yes'\n");
string choice = Console.ReadLine();
if (choice == "yes")
{
Console.WriteLine("Enter a value for the question number:\n");
string qnum = Console.ReadLine();
Console.WriteLine("Enter a value for what the question is out of:\n");
string score = Console.ReadLine();
Console.WriteLine("Enter a value for how much was scored:\n");
string qscore = Console.ReadLine();
Console.WriteLine("Enter a value for score:\n");
string score2 = Console.ReadLine();
Console.WriteLine("Enter the total mark:\n");
string total = Console.ReadLine();
valuesToFill = new Content(
new TableContent("examrubric")
.AddRow(
new FieldContent("qnum", qnum),
new FieldContent("score", score),
new FieldContent("qscore", qscore),
new FieldContent("score2", score2),
new FieldContent("total", total)));
}
else
{
break;
}
}
}
您可以试试下面的代码,在循环中将数据写入docx文件,避免重写数据。
static void Main(string[] args)
{
File.Copy("test1.docx", "OutputDocument.docx");
Console.WriteLine("To enter a row to the tabel type 'yes'\n");
string choice = Console.ReadLine();
Content valuesToFill = new Content(new TableContent("Team Members Table"));
for (int i = 0; i < 2; i++)
{
if (choice == "yes")
{
Console.WriteLine("Enter a value for the Name:\n");
string name = Console.ReadLine();
Console.WriteLine("Enter a value for the Role:\n");
string role = Console.ReadLine();
valuesToFill.Tables.First().AddRow(
new FieldContent("Name", name),
new FieldContent("Role", role)) ;
}
}
using (var outputDocument = new TemplateProcessor("OutputDocument.docx").SetRemoveContentControls(true))
{
outputDocument.FillContent(valuesToFill);
outputDocument.SaveChanges();
}
}
测试结果: