Мне нужно сгенерировать несколько текстовых документов на основе шаблона.В каждом документе необходимо заменить определенные строки (все они заключены в двойной набор фигурных скобок, просто чтобы их легко отличить друг от друга).
Я пытался:
** Чтение всего шаблона изаменить все вхождения слова с помощью Regex.Replace
using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(document, true))
{
string docText = null;
using (StreamReader sr = new StreamReader(wordDoc.MainDocumentPart.GetStream()))
docText = sr.ReadToEnd();
foreach (var key in keysToSearch)
docText = new Regex(key, RegexOptions.IgnoreCase).Replace(docText, replaceText);
using (StreamWriter sw = new StreamWriter(wordDoc.MainDocumentPart.GetStream(FileMode.Create)))
sw.Write(docText);
}
** А также получить доступ к каждому элементу Text
using ( WordprocessingDocument doc =
WordprocessingDocument.Open(@"yourpath\testdocument.docx", true))
{
var body = doc.MainDocumentPart.Document.Body;
var paras = body.Elements<Paragraph>();
foreach (var para in paras)
{
foreach (var run in para.Elements<Run>())
{
foreach (var text in run.Elements<Text>())
{
if (text.Text.Contains("{{FullName}}"))
{
text.Text = text.Text.Replace("{{FullName}}", "replaced-text");
}
}
}
}
}
Но ни одно из перечисленных выше решений не сработало, потому что в.docx-файлы, все эти фигурные скобки хранятся в разных текстовых элементах (<w:t>
):
<w:r w:rsidR="00786C31" w:rsidRPr="00475C3D">
<w:rPr>
<w:b/>
<w:sz w:val="36"/>
<w:highlight w:val="yellow"/>
<w:lang w:val="es-PE"/>
</w:rPr>
<w:t>{{</w:t>
</w:r>
<w:proofErr w:type="spellStart"/>
<w:r w:rsidR="001B7FC4" w:rsidRPr="00475C3D">
<w:rPr>
<w:b/>
<w:sz w:val="36"/>
<w:highlight w:val="yellow"/>
<w:lang w:val="es-PE"/>
</w:rPr>
<w:t>FullName</w:t>
</w:r>
<w:proofErr w:type="spellEnd"/>
<w:r w:rsidR="00786C31" w:rsidRPr="00475C3D">
<w:rPr>
<w:b/>
<w:sz w:val="36"/>
<w:highlight w:val="yellow"/>
<w:lang w:val="es-PE"/>
</w:rPr>
<w:t>}}</w:t>
</w:r>
Можно ли каким-либо образом использовать специальные символы для пометки переменной в моих шаблонах, чтобы потом можно было легко найтии заменить их?