当我在ASP.Net中重新发现缺失值时,Microsoft.Office.Interop.Word库正在给出Null引用异常

时间:2015-03-05 06:50:10

标签: asp.net office-interop

Application msWord = new Microsoft.Office.Interop.Word.Application();
Document doc;
object objMiss = System.Reflection.Missing.Value;
object endofdoc = "\\endofdoc";

protected void Page_Load(object sender, EventArgs e)
{

    if (!IsPostBack)
    {

        // add blank documnet in word application

        doc = msWord.Documents.Add(ref objMiss, ref objMiss, ref objMiss, ref objMiss);
     Microsoft.Office.Interop.Word.Paragraph para1;

        // add paragraph with document

        para1 = doc.Content.Paragraphs.Add(ref objMiss);
   }

}

当我分配给para1时,它给出了错误 - 你调用的对象是空的。

在我的本地机器上工作正常。但是在Remote上它会出错。 注意 - MS Office安装在服务器上。

2 个答案:

答案 0 :(得分:2)

Microsoft目前不建议也不支持从任何无人参与的非交互式客户端应用程序或组件(包括ASP,ASP.NET,DCOM和NT服务)自动化Microsoft Office应用程序,因为Office在此环境中运行Office时,可能会出现不稳定的行为和/或死锁。

如果要构建在服务器端上下文中运行的解决方案,则应尝试使用已为安全无人值守执行的组件。或者,您应该尝试找到允许至少部分代码在客户端运行的替代方法。如果从服务器端解决方案使用Office应用程序,则应用程序将缺少许多成功运行的必要功能。此外,您将承担整体解决方案稳定性的风险。您可以在Considerations for server-side Automation of Office文章中详细了解相关内容。

如果只处理opel XML文件格式文档,请考虑使用Open XML SDK。如果需要使用二进制文件,请查找支持服务器端执行的任何第三方组件。

答案 1 :(得分:2)

您应该在场景中使用OpenXML而不是Interop(Office COM)。但掌握OpenXML是一项非常重要的任务,大多数人很快意识到购买一些使用它并立即提高工作效率的工具包是值得的。

一个可能非常符合您需求的工具是Docentric Toolkit。它是引擎盖下的OpenXML工具包(它是许可的第三方产品)。您可以从头开始以编程方式创建文档对象模型。从这个角度来看,它提供了类似于使用Office COM的结果。您可以选择.docx或.pdf输出。

使用.docx和.pdf中的输出进行基于模板的报告也非常方便。我们公司使用它已有好几年了,我们使用这个工具包开发了大部分报告。报表模板是使用特殊加载项在Word中设计的。它非常简单,甚至一些最终用户也在设计报告。模板包含数据的可视布局,格式和占位符。

模板准备就绪后,可以从任何.NET应用程序调用它,其中数据以.NET对象的形式(例如,来自数据库或XML)准备。然后使用两行代码生成最终文档,其中模板和数据合并在一起。最终文件是纯粹的.docx文件。