以编程方式将邮件合并域插入到word文档中的超链接中

时间:2014-11-06 16:09:57

标签: c# ms-word office-interop

我试图弄清楚如何以编程方式将邮件合并域插入到word文档中的超链接中。

在ms word应用程序中,在代码视图(ALT + F9)中使用以下代码可以轻松完成: {HYPERLINK "http://example.com?id={MERGEFILED ID}"}

我咨询了stackoverflow和谷歌,但空手而归。 我怎么能通过C#word互操作性库来完成上面代码片段?

现在这就是我所拥有的:

using mso = Microsoft.Office.Interop.Word;
public class Test
{
    public void GenerateDynamicHyperlinkWithMergeField()
    {
        mso.Application app = new mso.Application();
        object missing = System.Reflection.Missing.Value;
        mso.Document doc = app.Documents.Add(ref missing, ref missing, ref missing, ref missing);

        mso.Range range = app.Selection.Range;

        // this is hyperlinked correctly
        mso.Hyperlink hl = document.Hyperlinks.Add(range, "http://example.com?id=", ref missing, ref missing, "textToDisplay", ref missing);   

        // this mergfield is outside of hyperlink
        mso.MailMerge merge = app.ActiveDocument.MailMerge;
        mso.MailMergeField mf = merge.Fields.Add(range, "id");

        // inserts mergefield code into hyperlink, but not as recognizable code by word application
        mso.Hyperlink hl2 = document.Hyperlinks.Add(range, "http://example.com?id=" + mf.Code.Text, ref missing, ref missing, "textToDisplay", ref missing);
    }
}

非常感谢任何帮助。

更新:
澄清word文档中预期的结果;
我想要这个:{HYPERLINK "http://example.com?id={MERGEFILED ID}"}
但是我使用上面的函数得到了这个:{HYPERLINK "http://example.com?id="}{MERGEFILED ID}

2 个答案:

答案 0 :(得分:0)

试试这个:

string myLink = "http://example.com?id=" + mf.Code.Text; 
mso.Hyperlink hl2 = document.Hyperlinks.Add(range, myString, ref missing, ref missing, "textToDisplay", ref missing);

答案 1 :(得分:0)

这可能是一个红色的鲱鱼,但是你注意到它是MERGEFILED而不是MERGEFIELD吗? 我只提出来,因为在所有情况下你都提到它。