Free Support Forum - aspose.com

Word中,请问如何删除表格中的行


#1

非常感谢大力支持!

现在有一个需求需要实现,在附件中表格中(黄色的区域),当单元格数字是0的时候,删除此行。

请问如何实现?

谢谢!testtravel-out.zip (27.9 KB)


#2

@hzjianglf,

请同时压缩并附上您预期的Word文档(DOCX文件),以显示正确的最终输出,以供我们参考。 请使用MS Word创建此预期文档。 然后,我们将研究您期望的文档的结构,以了解您希望如何生成最终输出,并通过使用Aspose.Words为您提供实现相同的代码。 谢谢你的合作。


#3

@awais.hafeez 谢谢你及时的回复。

附件是源文件 和 期待的结果文件,再次感谢你的帮助!
test.zip (54.7 KB)


#4

@hzjianglf ,

请尝试使用以下代码:

Document doc = new Document("E:\\test\\in.docx");

ArrayList list = new ArrayList();
foreach (Cell cell in doc.GetChildNodes(NodeType.Cell, true))
{
    if (cell.ToString(SaveFormat.Text).Trim() == "0" &&
        ((Cell)cell.PreviousSibling).ToString(SaveFormat.Text).Trim() == "" &&
        ((Cell)cell.PreviousSibling.PreviousSibling).ToString(SaveFormat.Text).Trim() == "")
    {
        list.Add(cell.ParentRow);
    }
}

foreach (Row row in list)
    row.Remove();

doc.Save("E:\\test\\19.4.docx");

#5

@awais.hafeez 感谢及时的回复

在上传的test压缩包这个例子,请问如何再增加一个条件,当最左边的合并的单元格=“其他费用” 或者在这个位置,增加一个标签,当满足以上条件时,再删除行。


#6

@hzjianglf,

您可以在要删除的行中插入书签,并使用以下代码确定这些行:

Bookmark bm = doc.Range.Bookmarks["bm"];
Row row = (Row) bm.BookmarkStart.GetAncestor(NodeType.BookmarkStart);
if (row != null)
{
    // do something 
} 

希望这可以帮助。


#7

@awais.hafeez 感谢你的回复!

对不起!可能我没表述清楚。

目前我的需求是: 内容为“其他费用”的单元格里(这个单元格是合并的单元格),放上一个书签, 然后用代码判断右边的每行的单元格是不是为0,如果是0,就删除这行,以此类推。

这个问题的难点是: 在一个合并的单元格里放一个书签后,如何用代码定位右边的行及单元格,请指点。谢谢!(请看上次已经上传的test.zip)


#8

@hzjianglf,

如果仅将Bookmark放在合并的单元格中,则很难识别所需的行。 我建议你请使用以下帖子中提到的代码。