我有一个word文档,其中添加了表格。我想访问该文档并将新的空行添加到其中已有的表中。我提到了this引用链接并在下面创建了代码:
static void Main(string[] args)
{
string filePath = "C:\\TestDoc1.docx";
byte[] byteArray = File.ReadAllBytes(filePath);
using (MemoryStream stream = new MemoryStream())
{
stream.Write(byteArray, 0, (int)byteArray.Length);
using (WordprocessingDocument doc = WordprocessingDocument.Open(stream, true))
{
Body bod = doc.MainDocumentPart.Document.Body;
foreach (Table t in bod.Descendants<Table>().Where(tbl => tbl.GetFirstChild<TableRow>().Descendants<TableCell>().Count() == 4))
{
// Create a row.
TableRow tr = new TableRow();
t.Append(tr);
}
}
// Save the file with the new name
File.WriteAllBytes("C:\\TestDoc2.docx", stream.ToArray());
}
}
但是,代码不会引发任何错误。但是当我打开TestDoc2.docx时,我收到以下错误:
我错过了什么?
答案 0 :(得分:0)
我找到了一个快速,轻量级的代码plex helper dll,它不需要安装Microsoft Word或Office。你可以从here获得。将此dll的引用添加到您的解决方案中并写下以下代码:
using(DocX doc = DocX.Load(filePath))
{
// you can use whatever condition you would like to select the table from that table.
// I am using the Title field value in the Table Properties wizard under Alter Text tab
Novacode.Table t = doc.Tables.Cast<Table>().FirstOrDefault(tbl => tbl.TableCaption == "Test");
Row r = t.InsertRow();
doc.SaveAs("C:\\TestDoc2.docx");
}
在我的情况下,它就像一个魅力! : - )
希望这也有助于其他人。
答案 1 :(得分:0)
您的第一个代码中缺少的是TableCell和Paragraph
// Create a row.
TableRow tr = new TableRow(new TableCell(new Paragraph()));
t.Append(tr);
TableRow必须至少包含一个TableCell,而TableCell必须包含段落