Word docx слияние в сервисе приложений Azure - PullRequest
0 голосов
/ 09 апреля 2020

В службе приложений, работающей на 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();
  }
}

1 Ответ

1 голос
/ 09 апреля 2020

Вы можете попробовать, используя Open XML SDK:

https://docs.microsoft.com/en-us/office/open-xml/word-processing

Если это по какой-то причине не работает, попробуйте сделать то же самое используя приложение Azure Logi c:

https://medium.com/plumsail/create-complex-excel-and-word-documents-from-templates-in-microsoft-flow-azure-logic-apps-and-794334e59f0f

...