Azure 应用服务中的邮件合并 word docx
Mail merge word docx in Azure app service
在 Azure 上的应用服务 运行 中,我需要用内容替换 word/docx-document 中的邮件合并字段。
据我了解,不能使用 interop,因为它需要安装 word。
那么如何在 c# 应用服务中替换 Azure 上的邮件合并字段?
也许可以为此使用 OpenXML SDK?但是怎么办?
[更新]
OpenXML 有效,我创建了以下助手 class 来替换邮件合并内容:
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();
}
}
您可以尝试使用 Open XML SDK:
https://docs.microsoft.com/en-us/office/open-xml/word-processing
如果由于某种原因这不起作用,请尝试使用 Azure 逻辑应用程序执行相同操作:
在 Azure 上的应用服务 运行 中,我需要用内容替换 word/docx-document 中的邮件合并字段。 据我了解,不能使用 interop,因为它需要安装 word。
那么如何在 c# 应用服务中替换 Azure 上的邮件合并字段? 也许可以为此使用 OpenXML SDK?但是怎么办?
[更新] OpenXML 有效,我创建了以下助手 class 来替换邮件合并内容:
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();
}
}
您可以尝试使用 Open XML SDK:
https://docs.microsoft.com/en-us/office/open-xml/word-processing
如果由于某种原因这不起作用,请尝试使用 Azure 逻辑应用程序执行相同操作: