#.net-core #openxml #openxml-sdk
#.net-core #openxml #openxml-sdk
Вопрос:
У меня есть документ Word, в котором мне нужно заменить определенные переменные-заполнители фактическими данными с использованием .NET Core.
Это тестовый документ, с которым я работаю. Как вы можете видеть, в настоящее время он имеет две переменные-заполнители.
Код , который я должен прочитать документ Word и заменить текст , взят из MSDN с помощью WordprocessingDocument
.
await using var stream = new MemoryStream();
stream.Write(template.Blob, 0, template.Blob.Length);
using (var wordDoc = WordprocessingDocument.Open(stream, true))
{
if (wordDoc.MainDocumentPart == null)
{
return null;
}
string docText;
using (var sr = new StreamReader(wordDoc.MainDocumentPart.GetStream()))
{
docText = await sr.ReadToEndAsync();
}
// Test replacing a variable
Regex regexText = new Regex("{{Building_Current_Version}}");
docText = regexText.Replace(docText, "Some Value");
await using (var sw = new StreamWriter(wordDoc.MainDocumentPart.GetStream(FileMode.Create)))
{
await sw.WriteAsync(docText);
}
}
Но это не работает, потому docText
что выходные данные отформатированы следующим образом:
<w:r w:rsidR="00287CAD">
<w:rPr>
<w:lang w:val="en-US"/>
</w:rPr>
<w:br/>
<w:t>{{</w:t>
</w:r>
<w:proofErr w:type="spellStart"/>
<w:r w:rsidR="00287CAD">
<w:rPr>
<w:lang w:val="en-US"/>
</w:rPr>
<w:t>Building_Current_Version</w:t>
</w:r>
<w:proofErr w:type="spellEnd"/>
<w:r w:rsidR="00287CAD">
<w:rPr>
<w:lang w:val="en-US"/>
</w:rPr>
<w:t>}}</w:t>
</w:r>
<w:r w:rsidR="00287CAD">
<w:rPr>
<w:lang w:val="en-US"/>
</w:rPr>
<w:br/>
<w:t>{{</w:t>
</w:r>
<w:proofErr w:type="spellStart"/>
<w:r w:rsidR="00287CAD">
<w:rPr>
<w:lang w:val="en-US"/>
</w:rPr>
<w:t>Building_Current_ValidUntil</w:t>
</w:r>
<w:proofErr w:type="spellEnd"/>
<w:r w:rsidR="00287CAD">
<w:rPr>
<w:lang w:val="en-US"/>
</w:rPr>
<w:t>}}</w:t>
</w:r>
По какой-то причине скобки помещаются в отдельные теги XML. Но иногда это не так. Иногда это также разбивает переменную на отдельные теги XML. Я не добавляю никакого форматирования к текстам.
Похоже, что простая замена строки здесь не работает… Если нет способа сообщить Word, чтобы не разделять переменные в отдельных XML-тегах?
Как я могу решить эту проблему?