我有一个word文档,它使用了几个包含邮件合并字段的文本框。
我希望通过使用我制作的系统以编程方式将合并邮件合并到word文档中,搜索文档中的任何邮件合并字段,然后将相应的值插入邮件合并字段,然后将文档另存为一个新文件。
使用
Document.StoryRanges
我可以为1个文本框执行上述过程。
但是如果我制作了几个文本框,它似乎只是将值一致地插入到其中一个文本框中。接收值的texbox不会更改。如果我尝试删除该文本框,邮件合并过程不起作用,然后我必须摆弄一些其他文本框才能使其工作。例如,我必须向后移动文本框,然后转发系统才能将邮件合并到仅文本框中。
我尝试过创建一个foreach循环进入每个文本框,但没有取得多大成功。所以我做了一些调试,发现系统只读取整个文档和其中一个文本框StoryRanges
。
答案 0 :(得分:1)
这是我最近使用的解决方案。您可以通过Document.Shapes访问邮件合并字段。我不确定这里到底发生了什么,但它对我有用。
public static List<Field> getMailMergeFields(Document document)
{
List<Field> mailMergeFields = new List<Field>();
foreach (Shape shape in document.Shapes)
{
if (shape.TextFrame.HasText != 0)
{
foreach (Field field in shape.TextFrame.ContainingRange.Fields)
{
if (isMailMergeField(field)) mailMergeFields.Add(field);
}
}
}
foreach (Field field in document.Fields)
{
if (isMailMergeField(field)) mailMergeFields.Add(field);
}
return mailMergeFields;
}
public static bool isMailMergeField(Field field)
{
string fullField = field.Code.Text.Trim();
if (!fullField.StartsWith("MERGEFIELD")) return false;
if (!fullField.EndsWith(@"\* MERGEFORMAT")) return false;
return true;
}
希望这有帮助。