3

我整理了一个简单的 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所以当实例弹出一个对话框说文件被锁定以进行编辑(我自己???)它提示我打开一个只读版本,以前我看不到,看起来一切都在处理中被冻结。我已经修改了上面的代码以反映更改。

关于为什么我被锁定在自己的文件之外以及如何防止这种情况的任何想法?

这些是我在接受打开只读文档后收到的对话框(按顺序):

结果 对话1 对话2 对话3 对话4 对话5 对话6 对话7

选择如何替换上面的字段后:

合并错误

原始邮件合并字段:

在此处输入图像描述

个人选择后:

在此处输入图像描述

如何告诉 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

4

1 回答 1

0

您可以将OpenAndRepair模式设置为True然后打开文档

替换这个:

oWrdDoc = oWord.Documents.Open(oTemplatePath);

有以下内容:

oWrdDoc =  word.Documents.Open(oTemplatePath, OpenAndRepair: true);
于 2013-11-14T18:17:43.510 回答