Office应用程序在德语窗口打开文档时挂起,适用于英语窗口

时间:2013-09-11 10:25:28

标签: c# wcf service ms-word office-interop

我们在服务中发现了一个似乎只存在于德语版Microsoft Windows中的错误。这是代码:

public Application OpenApplicationWithFile(object filename)
{
    object _missing = System.Reflection.Missing.Value;
    Application objWord = new Application();
    objWord.DisplayAlerts = WdAlertLevel.wdAlertsNone;
    objWord.Application.Visible = false;
    objWord.Documents.Open(ref filename, ref _readOnly, ref _missing, ref _missing, ref _missing,
                                   ref _missing,
                                   ref _missing, ref _missing, ref _missing, ref _missing, ref _isVisible,
                                   ref _missing,
                                   ref _missing, ref _missing,
                                   ref _missing, ref _missing);
    return objWord;
}

调试器挂起在 Documents.Open()调用上,只是等待 - 不会触发任何类型的异常或错误。我们查看了事件日志,但只发现了以下内容:

  

Das Dokument'revert1002.doc'verursachte ein Problem,als es zuletzt   geöffnetwurde。 MöchtenSiemitdemÖffnenfortfahren?

通过谷歌翻译转换为:

  

文档'convert1002.doc'上次导致严重错误   打开。你想继续开放吗?

因此,Word似乎只是向用户询问了一些东西,但是由于它是不可见的,因此用户无法完全单击是或否。将 objWord.Application.Visible 值更改为 true 不会改变任何内容 - 单词process仍然是不可见的。所以我的问题是如何调查这种情况的原因以及如何解决它。感谢您的任何意见。

2 个答案:

答案 0 :(得分:3)

每个语言版本都会出现此错误,并且根据您使用的Word版本,可能不容易阻止隐藏的对话框。你使用哪个Word版本?

但首先,你的参数是一个(我认为)。 ReadOnly是第三个参数,这就是为什么_isVisible我不能正常工作。

我尝试将objWord.Application.Visible设置为true,它对我有用。也许别的东西也错了?

一个快速解决方案可能是将OpenAndRepair设置为true。它是13.参数,紧跟在后面是可见的。

否则看看这个链接: How To Dismiss a Dialog Box Displayed by an Office Application with Visual Basic

答案 1 :(得分:2)

此问题可能类似于此处讨论的内容Interop.Word Documents.Open stuck

当您尝试使用德语版本打开文件时,您是否尝试打开同一个文件?

尝试打开其他文件。

尝试设置的其他事项:

objWord.DisplayAlerts = WdAlertLevel.wdAlertsAll;

和/或尝试将openandrepair设置为true,如Uwe所述:

Object obOpenAndRepair = true;
Document doc = word.Documents.Open(ref filename, ref _readOnly,
                    ref _missing, ref _missing, ref _missing, ref _missing, ref _missing,
                    ref _missing, ref _missing, ref oMissing,  ref _missing,ref _isVisible,
                    ref obOpenAndRepair, ref _missing, ref _missing, ref _missing);

希望这会有所帮助,祝你好运。