Aspose.Word 找不到类似 word 中拆分单元格的功能

类似我有个嵌套合并的单元格,我想把这个单元格拆分成4行 5列,office word 中就有功能,并且拆分的很好,很美观,但是在aspose中找不到类似功能。试过用插入行列的方法做,但是这样整个表都错乱了,这个问题困扰了很久,aspose 是否有提供这类接口呢


拆分前

拆分后

@yxy 没有内置的方法来拆分表格中的单元格。 要水平分割单元格,需要克隆单元格并将其添加到要分割的单元格后面,然后相应地调整单元格宽度。 如果垂直分割单元格,事情会有点困难。 需要克隆该行并垂直合并克隆行中的单元格。 这就是垂直分割单元格时 MS Word 所做的操作。 下面是实现垂直和水平单元格分割操作的代码示例:

Document doc = new Document("C:\\Temp\\in.docx");
// Get the table.
Table table = doc.FirstSection.Body.Tables[0];
// Split the first cell of the first row vertically.
SplitCellVertically(table.FirstRow.FirstCell, 5);
// Split the last cell of the last row horizontally.
SplitCellHorizontally(table.LastRow.LastCell, 5);
doc.Save("C:\\Temp\\out.docx");
private static void SplitCellVertically(Cell c, int cells)
{
    // Get parent row of the cell.
    Row parentRow = c.ParentRow;

    // Get the cell index
    int cellIndex = parentRow.Cells.IndexOf(c);

    // Set vertical cell merge in the parent row.
    // This row is the first.
    foreach (Cell cell in parentRow.Cells)
    {
        if (cell != c)
            cell.CellFormat.VerticalMerge = CellMerge.First;
    }

    // Clone and add the row below the parent row.
    for (int i = 0; i < cells - 1; i++)
    {
        Row r = (Row)parentRow.Clone(true);

        // Merge cells with previous.
        foreach (Cell cell in r.Cells)
        {
            // Remove content from the cell
            cell.RemoveAllChildren();
            cell.EnsureMinimum();

            if (r.Cells.IndexOf(cell) != cellIndex)
                cell.CellFormat.VerticalMerge = CellMerge.Previous;
        }

        // Insert the cell below the parent cell
        parentRow.ParentNode.InsertAfter(r, parentRow);
    }
}
private static void SplitCellHorizontally(Cell c, int cells)
{
    double newCellWidth = c.CellFormat.Width / cells;
    c.CellFormat.Width = newCellWidth;
    for (int i = 0; i < cells - 1; i++)
        c.ParentRow.InsertAfter(c.Clone(false), c);
}

in.docx (12.6 KB)
out.docx (10.1 KB)

好的,感谢回复,我测试一下效果

1 Like