gpt4 book ai didi

c# - 替换 OpenXML 中的内容控件

转载 作者:可可西里 更新时间:2023-11-01 08:10:45 24 4
gpt4 key购买 nike

我需要一些东西作为占位符。我最初将内容控制视为一种解决方案,但我遇到了一些问题。

然后我考虑将 CustomXML 添加到 .docx,但由于 i4i 诉讼而放弃了。

然后我决定通过 OpenXML SDK 2.0 简单地更改内容控件的文本,但即使如此标记,内容控件也不会消失。我猜它不知道文本发生了变化,除非它发生在 word 中。

我也许可以只删除 CC 并改为放置文本,但我担心它可能带来的格式和样式问题,而且它会有点违背内容控件的目的。

然后我开始考虑是否可以定义自己的 Word 可以识别的占位符。也许通过积木。它不需要做任何事情,除了使用 OpenXML 很容易找到并且可以以某种方式标记,所以我知道用什么来替换它。我不太确定 Building Blocks 可以做什么,但我希望它是可行的。

不确定哪种解决方案最适合我,但我需要的是:

b)添加数据后,它会删除所有占位符,不会再次修改。它保留占位符中定义的样式/格式。

回顾一下,我需要回答其中一个问题

如何在 OpenXML SDK 中编辑内容控件,以便在添加文本后删除它们。

-或-

我可以为 Word 文档定义我自己的自定义 OpenXML 标记,然后我可以替换它吗?

最佳答案

也许这对你有帮助,

private void DeleteSdtBlockAndKeepContent(MainDocumentPart mainDocumentPart, string sdtBlockTag)
{
List<SdtBlock> sdtList = mainDocumentPart.Document.Descendants<SdtBlock>().ToList();
SdtBlock sdtA = null;

foreach (SdtBlock sdt in sdtList)
{
if (sdt.SdtProperties.GetFirstChild<Tag>().Val.Value == sdtBlockTag)
{
sdtA = sdt;
break;
}
}


OpenXmlElement sdtc = sdtA.GetFirstChild<SdtContentBlock>();
OpenXmlElement parent = sdtA.Parent;

OpenXmlElementList elements = sdtc.ChildElements;

var mySdtc = new SdtContentBlock(sdtc.OuterXml);

foreach (OpenXmlElement elem in elements)
{

string text = parent.FirstChild.InnerText;
parent.Append((OpenXmlElement)elem.Clone());
}

sdtA.Remove();
}

关于c# - 替换 OpenXML 中的内容控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3448297/

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