如何从文档中成功删除具有给定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。
提前致谢,
NEHA
答案 0 :(得分:0)
我对块有同样的问题,但我想我解决了它。
如果仔细查看代码以添加块,您会发现它实际上做了两件事:
AddAlternativeFormatImportPart
)和
InsertAfter
)添加对chunck的引用。删除块的代码不会删除对块的引用。如果您随后添加一个具有相同ID 和的新块添加引用,则最终会出现两次显示的块。
有关详细信息,请参阅AltChunk class documentation on MSDN。
我使用此代码删除对块的任何现有引用。
var altChunks = mainPart.RootElement.Descendants<AltChunk>().Where(e => e.Id == altChunkId);
foreach (var altChunk in altChunks)
{
altChunk.Remove();
}
之后,您可以使用DeletePart()
删除块本身。
我必须承认我是通过反复试验找到的,所以我并不是100%确定这是推荐的方法,但它似乎有用。
为了更好地了解块实际上是什么,我解压缩.docx文件(7-zip愿意这样做)并找到一个包含块的目录 word ,以及一个目录 _rels ,里面有一个文件 document.xml.rels 。后者列出了对chuncks的引用,即它们应插入的位置。