Мне нужно что-то в качестве заполнителя. Сначала я рассматривал Content Control как решение, но у меня возникли некоторые проблемы с ним.
Затем я посмотрел на добавление CustomXML в. docx, но отвернулся от этого из-за судебного процесса по i4i.
Тогда я решил, что просто изменил бы текст Контент-контроля через OpenXML SDK 2.0, но даже если он будет помечен, Контент-контроль не исчезнет. Я предполагаю, что он не знает, что текст изменился, если это не происходит внутри слова.
Я мог бы просто удалить CC и поместить текст вместо этого, но я боюсь проблем с форматом и стилями, которые он может принести, а также вроде как бросает вызов цели Контент Контроля.
Тогда я начал задаваться вопросом, могу ли я определить свои собственные заполнители, которые Word мог бы распознать. Возможно, через строительные блоки. Он не должен делать ничего, кроме того, что его легко найти с помощью OpenXML и каким-то образом тегировать, поэтому я знаю, чем его заменить. Я не совсем уверен, что можно сделать с помощью строительных блоков, но я Я надеюсь, что это выполнимо.
Не уверен, какое решение будет лучше для меня, но мне нужно следующее:
a) Что-то, что легко разместить в шаблоне, возможно, предопределенные заполнители Контроля контента, которые вы можете разместить там, где вы не хотите и стиль как вам нравится.
б) Когда данные были добавлены, они удаляют все заполнители, они не будут изменены снова. Он сохраняет стиль / формат, определенный в заполнителе.
Чтобы ЗАПИСАТЬ, мне нужно ответить либо на
. Как я могу редактировать Content Controls в OpenXML SDK, чтобы они были удалены после добавления текста.
-OR-
Можно ли определить свой собственный тег OpenXML для документа Word, который я затем смогу заменить?
Возможно, это поможет вам,
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();
}