类似我有个嵌套合并的单元格,我想把这个单元格拆分成4行 5列,office word 中就有功能,并且拆分的很好,很美观,但是在aspose中找不到类似功能。试过用插入行列的方法做,但是这样整个表都错乱了,这个问题困扰了很久,aspose 是否有提供这类接口呢
拆分前
拆分后
类似我有个嵌套合并的单元格,我想把这个单元格拆分成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);
}
好的,感谢回复,我测试一下效果