我已经制作了一个简单的C# Winforms应用程序,根据用户的条件查询AS400数据,并在ListView控件中返回结果。 在Button_Click()事件中,我将标题和数据存储在一个.txt文件中。 下面我尝试使用该.txt文件作为邮件合并Word文档的数据源。
当代码执行到
当代码执行到
oWrdDoc = oWord.Documents.Open(oTemplatePath);
时,程序似乎会冻结。 什么都没有发生,我无法跨越到下一行。 有人对我做错了什么有想法吗?public void Print(string docLoc, string docSource)
{
try
{
Word.Application oWord = new Word.Application();
Word.Document oWrdDoc = new Word.Document();
oWord.Visible = true;
Object oTemplatePath = "C:\\Users\NAME\\Desktop\\B-AIAddChgDual10-06-NEW.doc";
oWrdDoc = oWord.Documents.Open(oTemplatePath);
Object oMissing = System.Reflection.Missing.Value;
oWrdDoc.MailMerge.OpenDataSource("C:\\Users\\NAME\\Desktop\\Test2.txt", oMissing, oMissing, oMissing,
oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing);
oWrdDoc.MailMerge.Execute();
}
catch (Exception ex)
{
MessageBox.Show("Source:\t" + ex.Source + "\nMessage: \t" + ex.Message + "\nData:\t" + ex.Data);
}
finally
{
//
}
}
编辑: 原来我没有将新的Word实例设置为 Visible = true
,所以当实例弹出对话框说文件被锁定为编辑(难道是被我自己锁定了吗?)时,它提示我打开只读版本,之前我看不到,使得一切都像被卡住了。我已经修改了上面的代码以反映这些变化。
有什么想法可以解释我为什么被锁定在自己的文件之外以及如何防止这种情况发生?
这些是我在接受打开只读文档后收到的对话框(按顺序):
在选择如何替换上述字段后:
原始的邮件合并字段:
个人选择之后:
我如何告诉Word应用程序在我的C#代码中使用 '!' 字符作为字段分隔符?
还有,我该如何处理这些对话框?我假设我之所以收到每一个对话框是因为我的数据源不包含与列出的邮件合并字段相匹配的字段?
这是我的邮件合并字段:
-fuldate -sys -memno -name -address1 -address2 -address3 -sal
这是来自我的 .txt 数据源文件的分隔字段:
memno!name!addr1!addr2!city!state!zip!old_addr1!old_addr2!old_city!old_state!old_zip