gpt4 book ai didi

c# - 删除一个 altChunk

转载 作者:太空宇宙 更新时间:2023-11-03 15:12:31 25 4
gpt4 key购买 nike

如何从文档中成功删除具有给定 ID 的 altChunk。我遵循的过程是 -

MainDocumentPart mainPart = theDoc.MainDocumentPart;
mainPart.DeletePart(mainPart.GetPartById("AltChunkIdA1"));

我在给定的 sdt 之后添加 altChunk。为了添加一个 altChunk,我有以下代码 -

string altSchedChunkId = "AltChunkIdA1";
AlternativeFormatImportPart schedChunk = mainPart.AddAlternativeFormatImportPart(AlternativeFormatImportPartType.WordprocessingML, altSchedChunkId);
schedChunk.FeedData(File.Open(FileA12, FileMode.Open));
AltChunk altSchedChunk = new AltChunk();
altSchedChunk.Id = altSchedChunkId;

OpenXmlElement parent = sdtRunSchedTerms.Parent;
parent.InsertAfter(altSchedChunk, sdtRunSchedTerms);

但似乎并没有成功。每次我尝试编辑文档时,都会添加一个具有相同 ID 的新 altChunk,而不是删除 altChunk。

提前致谢

你好

最佳答案

我对 block 有同样的问题,但我想我已经解决了。

如果仔细查看添加 block 的代码,您会发现它实际上做了两件事:

  1. 创建一个 block (AddAlternativeFormatImportPart)

  1. 在文档中的某处添加对 chunck 的引用 (InsertAfter)。

删除 block 的代码不会删除对该 block 的引用。如果您随后添加一个具有相同 ID 的新 block 添加一个引用,您最终将看到您的 block 出现两次。

参见 AltChunk class documentation on MSDN了解更多详情。

我使用此代码删除对 block 的任何现有引用。

var altChunks = mainPart.RootElement.Descendants<AltChunk>().Where(e => e.Id == altChunkId);

foreach (var altChunk in altChunks)
{
altChunk.Remove();
}

之后,您可以使用 DeletePart() 删除 block 本身。

我必须承认我是通过反复试验发现的,所以我不能 100% 确定这是推荐的方法,但它似乎有效。

为了更好地了解 block 实际上是什么,我解压缩了一个 .docx 文件(7-zip 愿意这样做)并找到了一个包含 block 的目录 word作为一个目录_rels,里面有一个文件document.xml.rels。后者列出了对 block 的引用,即它们应该插入的位置。

关于c# - 删除一个 altChunk,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40481265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com