在asp.net中打开Word文件时应用程序没有响应



我想打开一个docx文件,然后使用Microsoft.Office.Interop.Word包在asp.net中将其转换为pdf文件。

这是我在asp按钮点击事件中编写的代码:

object fileFormat = Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatPDF;
Object missing = Type.Missing;
object saveName = strURL.Replace(".docx", ".pdf");
object openName = docPath + "\T4.docx";
Microsoft.Office.Interop.Word.Application wdApp = new Microsoft.Office.Interop.Word.Application();
Microsoft.Office.Interop.Word.Document doc = wdApp.Documents.Open(openName,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing);
doc.SaveAs(saveName,fileFormat,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing);
doc.Close(ref missing, ref missing, ref missing);

但它在执行时在wdApp.Documents.Open()行遇到了一些问题。

浏览器符号似乎总是加载。

我不知道这个错误的原因是什么。

Microsoft不支持服务器环境中Office应用程序的自动化,这篇KB文章解释了如果您尝试它可能会出现的一些潜在问题。

我建议您寻找第三方组件,例如Aspose。

当Word试图向用户显示对话框时,可能会发生这种情况。互操作程序不够智能,无法抑制所有这些对话框。尝试以下操作:

1) 登录服务器并手动打开MS Word。可能有某种对话框需要用户确认(例如第一次运行Word时显示的许可对话框)。一旦手动通过这些对话框,它们将不再是互操作的问题。(也可以尝试打开其中一个文档。也许问题出在文档本身。)

2) 在代码中抑制尽可能多的对话框。我知道有两个这样的地方(DisplayAlerts和NoEncodingDialog)。

var word = new Word.Application();
word.DisplayAlerts = Word.WdAlertLevel.wdAlertsNone;
Word.Documents documents = word.Documents;
documents.Open(openName, NoEncodingDialog: true);

附带说明,但非常重要:为了避免内存泄漏,您需要非常小心如何引用和处理这些COM对象。按照这个答案中的建议。如果你这样做了,你很可能会在ASP.NET中成功地使用interop

最新更新