使用 OpenXml 将行动态添加到现有 Word 文档中的表中

Mur*_*rad 1 c# ms-word openxml tabular

我正在使用 OpenXml 处理 Word 文档。现在我的 word 文档 (docx) 宽度标题中有两个表格,现在我需要向这些表格添加动态行。

Kas*_*sen 8

好的,这应该可以帮助你。我确信还有其他方法可以将行添加到现有表中,但这是我使用的一种。

我假设在这个例子中,你的表头正好是 1 行。在这个例子中,我在 Word 的表格中放置了一个名为“table”的书签。在桌子上的哪个位置并不重要,因为我正在通过 Parent 挖掘直到我到达桌子。

我的原始word文档: 加工前的桌子图片

带有注释的代码解释它:

//setup
using (var wordDoc = WordprocessingDocument.Open(@"C:\test\cb\exptable.docx", true))
{
    MainDocumentPart mainPart = wordDoc.MainDocumentPart;
    var document = mainPart.Document;
    var bookmarks = document.Body.Descendants<BookmarkStart>();

    //find bookmark
    var myBookmark = bookmarks.First(bms => bms.Name == "table");
    //dig through parent until we hit a table
    var digForTable = myBookmark.Parent;
    while(!(digForTable is Table))
    {
        digForTable = digForTable.Parent;
    }
    //get rows
    var rows = digForTable.Descendants<TableRow>().ToList();
    //remember you have a header, so keep row 1, clone row 2 (our template for dynamic entry)
    var myRow = (TableRow)rows.Last().Clone();
    //remove it after cloning.
    rows.Last().Remove();
    //do stuf with your row and insert it in the table
    for (int i = 0; i < 10; i++)
    {
        //clone our "reference row"
        var rowToInsert = (TableRow)myRow.Clone();
        //get list of cells
        var listOfCellsInRow = rowToInsert.Descendants<TableCell>().ToList();
        //just replace every bit of text in cells with row-number for this example
        foreach(TableCell cell in listOfCellsInRow)
        {
            cell.Descendants<Text>().FirstOrDefault().Text = i.ToString();
        }
        //add new row to table, after last row in table
        digForTable.Descendants<TableRow>().Last().InsertAfterSelf(rowToInsert);
    }
}
Run Code Online (Sandbox Code Playgroud)

运行代码后的文档: 在此处输入图片说明

这应该够了吧。