使用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从单词表中删除单元格

我最近一直在使用Novacode DocX。我意识到的是,类的许多方法都是继承的,没有被覆盖。例如cellcontainer继承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文本。

您可能需要将表保存回文档中。
尝试

  1. 将表格追加到文档末尾。 如果缺少单元格
  2. 删除并替换文档中的表格。

您必须自己从单元格元素中清除子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