我正在尝试使用.net程序自动化mailmerge。 word文档中有一个单页字母,发送给一个名为“Person”的mailmerge字段的特定人员。我们的数据库有多个人,每个人的名字都要写成一封信。我们希望一页的字母一个接一个地连接起来。目前,此代码尝试使用两个人 - 名称1&名2。下面的代码为每个人名打开一个单独的单词实例。
object oMissing = System.Reflection.Missing.Value;
//CREATING OBJECTS OF WORD AND DOCUMENT
Word.Application oWord = new Word.Application();
Word.Document oWordDoc = new Word.Document("C:\\Test\\AddressTemplate.docx");
//SETTING THE VISIBILITY TO TRUE
oWord.Visible = true;
//THE LOCATION OF THE TEMPLATE FILE ON THE MACHINE
Object oTemplatePath = "C:\\Test\\AddressTemplate.docx";
oWordDoc = oWord.Documents.Add(ref oTemplatePath, ref oMissing, ref oMissing, ref oMissing);
foreach (Microsoft.Office.Interop.Word.Field field in oWordDoc.Fields)
{
if (field.Code.Text.Contains("Person"))
{
field.Select();
oWord.Selection.TypeText(name1);
}
}
oWordDoc = oWord.Documents.Add(ref oTemplatePath, ref oMissing, ref oMissing, ref oMissing);
foreach (Microsoft.Office.Interop.Word.Field field in oWordDoc.Fields)
{
if (field.Code.Text.Contains("Person"))
{
field.Select();
oWord.Selection.TypeText(name2);
}
}
问题:如何更改代码以仅打开一个单词实例,填写mailmerge字段并在另一个结尾处连接一个字母?
答案 0 :(得分:1)
如果你调用新的Word.Application你正在创建一个新实例,如果你想要的是创建一个新实例(如果没有),但是如果已经有一个实例,则重用一个实例,你可以执行以下操作: p>
Application app;
try
{
app = (Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Word.Application");
}
catch
{
app = new Application();
}
根据您的评论,我认为您实际上只有1个单词实例打开,它只是在不同的Windows(但是单个应用程序)中打开两个文档。 Windows与应用程序不同。
如果您想在一个窗口中完成所有操作,您可以重复使用之前的文档,或者在打开新文档之前将其关闭
答案 1 :(得分:0)
' Use same winword instance if there; if not, create new one
Dim oApp As Application
Try
oApp = DirectCast(Runtime.InteropServices.Marshal.GetActiveObject("Word.Application"), Application)
Catch ex As Exception
' Word not yet open; open new instance
Try
' Ensure we have Word installed
oApp = New Application()
Catch eApp As Exception
Throw New ApplicationException(String.Format("You must have Microsoft Word installed to run the Top Line report"))
End Try
End Try
oApp.Visible = True