[英]Populate .docx second table using OpenXml SDK WordprocessingDocument
我试图从控制器填充 .docx 文件中的 2 个表。 填充第一个表没有问题。 但我似乎找不到填充第二个的方法。 这是我的控制器代码。
using (WordprocessingDocument sourceDoc = WordprocessingDocument.Open(Server.MapPath("~/doc/temp.docx"), false))
using (var resultDoc = WordprocessingDocument.Create(stream, DocumentFormat.OpenXml.WordprocessingDocumentType.Document, true))
{
//Declare a TABLE class(This will get you first table of docx)
Table table = body.Elements<Table>().First();
//Accessing 1st row of the table
TableRow row = table.Elements<TableRow>().ElementAt(0);
//Accessing 2nd cell of that row
TableCell cell = row.Elements<TableCell>().ElementAt(0);
Paragraph p = cell.Elements<Paragraph>().First();
Run r = p.Elements<Run>().First();
Text text1 = r.Elements<Text>().First();
//replacing text in that CELL
text1.Text = text1.Text.Replace("xTitlex", "Title");
//Accessing 2nd ROW of That table
row = table.Elements<TableRow>().ElementAt(1);
//Accessing 2nd CELL of that row
cell = row.Elements<TableCell>().ElementAt(1);
p = cell.Elements<Paragraph>().First();
r = p.Elements<Run>().First();
text1 = r.Elements<Text>().First();
//Replacing text in that CELL
text1.Text = text1.Text.Replace("xVal1x", "Item1");
//This dont seem to work
//Declare a 2nd TABLE class(This will get you second table of docx)
Table table2 = body.Elements<Table>().Last();
TableRow row2 = table2.Elements<TableRow>().ElementAt(0);
////Accessing 2nd cell of that row
TableCell cell2 = row2.Elements<TableCell>().ElementAt(1);
Paragraph p2 = cell.Elements<Paragraph>().Last();
Run r2 = p.Elements<Run>().Last();
Text text12 = r.Elements<Text>().Last();
////replacing text in that CELL
text12.Text = text1.Text.Replace("xVal2x", "Item2");
}
stream.Seek(0, SeekOrigin.Begin);
首先,您的示例中似乎缺少一些代码。 例如,我看不到您是如何初始化body
变量的。 因此,让我们假设您基本上按如下方式初始化了body
:
Body body = sourceDoc.MainDocumentPart.Document.Body;
接下来,查看您的代码,您混淆了一些变量,因此引用了错误的表。 具体来说,代码中的以下几行正确选择了最后一个(在本例中为第二个)表,然后是第一行,最后是该行的第二个单元格。
//This dont seem to work
//Declare a 2nd TABLE class(This will get you second table of docx)
Table table2 = body.Elements<Table>().Last();
TableRow row2 = table2.Elements<TableRow>().ElementAt(0);
////Accessing 2nd cell of that row
TableCell cell2 = row2.Elements<TableCell>().ElementAt(1);
但是,然后,您根据第一个表的cell
、 p
和r
引用初始化下一个Paragraph
、 Run
和Text
实例p2
、 r2
和text12
,完全忽略cell2
、 p2
和r2
。
Paragraph p2 = cell.Elements<Paragraph>().Last();
Run r2 = p.Elements<Run>().Last();
Text text12 = r.Elements<Text>().Last();
这意味着text12
引用包含在您的第一个表中的Text
实例。 因此,最终,替换"xVal2x"
没有任何效果,因为该Text
实例不包含该字符串。
我得到了某人的帮助。 这就是解决方案。
//Declare a 2nd TABLE class(This will get you second table of docx)
Table table2 = body.Elements<Table>().ElementAt(1);
//Access first row
row = table2.Elements<TableRow>().ElementAt(0);
//Accessing 2nd cell of that row
cell = row.Elements<TableCell>().ElementAt(1);
p = cell.Elements<Paragraph>().First();
r = p.Elements<Run>().First();
text1 = r.Elements<Text>().First();
//Replacing text in that CELL
text1.Text = text1.Text.Replace("xVal2x", "Item2");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.