В службе приложений, работающей на Azure Мне нужно заменить поля слияния в документе word / docx на содержимое. Как я понимаю, взаимодействие не может быть использовано, потому что для этого нужно слово.
Итак, как заменить поля слияния в Azure в службе приложений c#? Может быть, для этого можно использовать Open XML SDK? Но как?
[Обновить] Открыть XML сработало, я создал следующий вспомогательный класс для замены содержимого mailmerge:
public static void DocXReplaceMergeFields(Stream docStream, Dictionary<string, string> placeholder)
{
using (var docXml = WordprocessingDocument.Open(docStream, true))
{
//docXml.ChangeDocumentType(WordprocessingDocumentType.Document);
foreach (var run in docXml.MainDocumentPart.Document.Descendants<Run>())
{
foreach (var text in run.Descendants<Text>().Where(a => a.Text.StartsWith("«") && a.Text.EndsWith("»")))
{
var propertyName = text.Text.Substring(1, text.Text.Length - 2);
if (placeholder.TryGetValue(propertyName, out var propertyValue))
text.Text = propertyValue;
}
}
var settingsPart = docXml.MainDocumentPart.GetPartsOfType<DocumentSettingsPart>().First();
var oxeSettings = settingsPart.Settings.Where(a => a.LocalName == "mailMerge").FirstOrDefault();
if (oxeSettings != null)
{
settingsPart.Settings.RemoveChild(oxeSettings);
settingsPart.Settings.Save();
}
docXml.MainDocumentPart.Document.Save();
}
}