使用OpenXml在现有word文档中动态地向表中添加行

时间:2017-04-26 06:36:32

标签: c# ms-word openxml tabular

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

1 个答案:

答案 0 :(得分:3)

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

我假设在这个例子中,你的表头是exatcly 1行。在这个例子中,我放了一个名为" table"在Word中的表格内。在桌子的哪个位置真的很重要,因为在我到达桌子之前我正在通过家长挖掘。

我原来的word文档: picture of table before processing

带有解释说明的代码:

//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);
    }
}

运行代码后的文档: enter image description here

这应该可以解决问题。