程序在执行oWord.Documents.Open(oTemplatePath)时卡住了?

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,所以当实例弹出对话框说文件被锁定为编辑(难道是被我自己锁定了吗?)时,它提示我打开只读版本,之前我看不到,使得一切都像被卡住了。我已经修改了上面的代码以反映这些变化。

有什么想法可以解释我为什么被锁定在自己的文件之外以及如何防止这种情况发生?

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

Reult Dialog1 Dialog2 Dialog3 Dialog4 Dialog5 Dialog6 Dialog7

在选择如何替换上述字段后:

Merge Errors

原始的邮件合并字段:

enter image description here

个人选择之后:

enter image description here

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


你使用的是哪个版本的 MS-Office? - Sudhakar Tillapudi
2010年,如果你希望查看我的修改,请解决初步问题。 - Analytic Lunatic
1个回答

0

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

请替换此内容:

oWrdDoc = oWord.Documents.Open(oTemplatePath);

以下是:

oWrdDoc =  word.Documents.Open(oTemplatePath, OpenAndRepair: true);

结果发现该实例不可见,因此我没有看到对话框询问我是否要打开只读副本,因为由于某种原因,该文档被锁定。请参阅我的编辑以获取其他信息。 - Analytic Lunatic
太好了,你自己解决了它 :) 开心编程 :) - Sudhakar Tillapudi
好的,我解决了那个问题,但是如果你看到我的编辑,我有很多讨厌的对话框 :) 我该如何在C#中编码告诉它使用我的'!'字符作为字段分隔符? - Analytic Lunatic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接