Aspose.word 如何删除文档里的段落,

比如我想删除下文中的第四段的第四小节,每次返回的都是一行的内容,我需要的是返回标题和下面的正文及图表等
四、健康管理情况
(1)高血压健康管理情况
2024年高血压人数100人。
(2)糖尿病健康管理情况
2024年糖尿病人数100人。
(3)新冠人群健康管理情况
2024年新冠人数100人。
(4)三高人数健康管理情况
2024年三高人数100人。

foreach (Paragraph para in _doc.GetChildNodes(NodeType.Paragraph,true))
{               
    Debug.WriteLine(para.GetText());
    if (para.GetText().Contains("三高共管")) 
    {
        para.Remove();
    }
}

@kunyu

要删除文档中的特定段落,您可以使用 Aspose.Words 提供的 API。根据您的需求,您想要删除第四段的第四小节,并且希望能够返回该段落的标题及其下方的正文和图表等内容。

以下是一个示例代码,展示如何实现这一点:

using System;
using Aspose.Words;

class Program
{
    static void Main()
    {
        // 加载文档
        Document doc = new Document("您的文档路径.docx");

        // 获取所有段落
        NodeCollection paragraphs = doc.GetChildNodes(NodeType.Paragraph, true);

        // 假设您知道要删除的段落的索引
        int targetParagraphIndex = 3; // 第四段的索引是3(从0开始计数)

        // 检查目标段落是否存在
        if (targetParagraphIndex < paragraphs.Count)
        {
            Paragraph targetParagraph = (Paragraph)paragraphs[targetParagraphIndex];

            // 输出目标段落的文本
            Console.WriteLine("要删除的段落内容: " + targetParagraph.GetText());

            // 删除目标段落
            targetParagraph.Remove();
        }

        // 保存修改后的文档
        doc.Save("修改后的文档路径.docx");
    }
}

在这个示例中,我们首先加载文档并获取所有段落。然后,我们通过索引找到目标段落,并在删除之前输出其内容。最后,保存修改后的文档。

请根据您的具体需求调整代码,例如处理标题和图表的逻辑。如果您需要进一步的帮助,请随时询问!

如果不知道段落所在的索引呢,文档内容并不是固定的,标题是固定的,能否通过标题删除正文内容

@kunyu 要删除内容,您需要知道开始和结束节点。例如,可以是标题样式的下一个段落。您可以使用以下代码作为示例:

Document doc = new Document("input.docx");

Node startPara = doc.GetChildNodes(NodeType.Paragraph, true)
    .OfType<Paragraph>()
    .FirstOrDefault(p => p.GetText().Contains("三高共管") && p.ParagraphFormat.IsHeading);
Node endPara = startPara.NextSibling;
while (endPara != null)
{
    if (endPara is Paragraph paragraph && paragraph.ParagraphFormat.IsHeading)
            break;

    endPara = endPara.NextSibling;
}

Section parentSection = (Section)startPara.GetAncestor(NodeType.Section);
// 获取区域中的所有节点。
NodeCollection nodes = parentSection.Body.GetChildNodes(NodeType.Any, true);

// 查找段首和段尾的索引。
int startIndex = nodes.IndexOf(startPara);
int endIndex = nodes.IndexOf(endPara);

// 删除开始段落和结束段落之间的所有节点。
for (int i = endIndex - 1; i > startIndex; i--)
{
    nodes.RemoveAt(i);
}

doc.Save("output.docx");

好的,谢谢 :grinning:,还有个问题
获取到文档里面的图表后再往图表里赋值后,在打开文件去选择图表区编辑数据会提示链接文件不可用。我也尝试了在代码里去添加图标,生成的文件去编辑图表的的时候依然会提示这个问题,这个问题有解决方案吗?我想在生成后的文档里去编辑修改数据


@kunyu 遗憾的是,目前还不支持编辑数据。该功能请求已记录在我们的缺陷跟踪系统中,编号为 WORDSNET-12092 。我们将随时更新,一旦实现或有更多信息,我们将通知您。