我试图弄清楚如何以编程方式将邮件合并域插入到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}
答案 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
吗?
我只提出来,因为在所有情况下你都提到它。