使用Novacode DocX从单词表中删除单元格
本文关键字:删除 单元格 单词表 Novacode DocX 使用 | 更新日期: 2023-09-27 17:57:03
如何使用Novacode DocX从单词表中删除单个单元格?
我试过:
table.Rows[0].Cells.RemoveAt(2);
和
Cell c = table.Rows[0].Cells[2];
table.Rows[0].Cells.Remove(c);
和
table.Rows[0].Cells.RemoveRange(2,4);
它们都不会删除任何单元格。
我最近一直在使用Novacode DocX。我意识到的是,类的许多方法都是继承的,没有被覆盖。例如cell
从container
继承Remove()
,并且永远不会被覆盖以执行您希望它执行的操作。sorcecode for Novacode.Table
您可以尝试解决此问题的是隐藏单元格/单元格,因为我假设您没有删除整行或整列。
Novacode.Table table = document.Tables[0]
Novacode.Row row = table.Rows[0]; //int of row that contains cell/cells to remove
int first_cell = 0; //beginning cell of range
int last_cell = 1; //last cell of range
for(int i = first_cell; i < last_cell + 1; i++)
{
foreach (var paragraph in row.Cells[i].Paragraphs)
{
paragraph.Remove(false);
}
}
row.MergeCells(first_cell, last_cell);
Novacode.Cell cell = row.Cells[first_cell];
Novacode.Border border = new Border();
border.Tcbs = Novacode.BorderStyle.Tcbs_none;
cell.SetBorder(Novacode.TableCellBorderType.Right, border);
cell.SetBorder(Novacode.TableCellBorderType.Left, border);
cell.SetBorder(Novacode.TableCellBorderType.Top, border);
cell.SetBorder(Novacode.TableCellBorderType.Bottom, border);
此代码将删除文本并合并第一个表格的前两个单元格,并使边框不可见。因此,这会将要删除的区域变成一个不可见的空白单元格,假设您在Cell
中使用Paragraphs
文本。
您可能需要将表保存回文档中。
尝试
- 将表格追加到文档末尾。 如果缺少单元格
- 删除并替换文档中的表格。
您必须自己从单元格元素中清除子XML,因为NovaCode DocX API无法正确处理它:
table.Rows.Last().Cells.Last().Xml.RemoveAll();
table.Rows.Last().Cells.Last().InsertParagraph();
请注意,最后的插入段落是必需的,因为单元格不能为空。
在Table
类中,您可以使用以下方法
MergeCells(int, int)
和
MergeCellsInColumn(int, int, int)
以"删除"单元格。
请参阅:https://docx.codeplex.com/SourceControl/latest#DocX/Table.cs