asp.net中的办公自动化问题。 如果我知道如何,我可以使用开放式办公室等替代方案

我有一个ASP.NET 2.0 Web应用程序,应该上传一个ppt文件,然后将其幻灯片提取到图像。 为此我导入了office.dll和Microsoft.Office.Interop.PowerPoint.dll程序集并编写了以下代码

public static int ExtractImages(string ppt, string targetPath, int width, int height) { var pptApplication = new ApplicationClass(); var pptPresentation = pptApplication.Presentations.Open(ppt, MsoTriState.msoTrue, MsoTriState.msoFalse, MsoTriState.msoFalse); var slides = new List(); for (var i = 1; i <= pptPresentation.Slides.Count; i++) { var target = string.Format(targetPath, i); pptPresentation.Slides[i].Export(target, "jpg", width, height); slides.Add(new FileInfo(target).Name); } pptPresentation.Close(); return slides.Count; } 

如果我在本地机器,asp.net或可执行文件中运行此代码,它运行完美。 但是,如果我尝试在生产服务器中运行它,我会收到以下错误:

System.Runtime.InteropServices.COMException(0x80004005):PowerPoint无法打开该文件。 在Microsoft.Office.Interop.PowerPoint.Presentations.Open(String FileName,MsoTriState ReadOnly,MsoTriState Untitled,MsoTriState WithWindow)at PPTImageExtractor.PptConversor.ExtractImages(String caminhoPpt,String caminhoDestino,Int32 largura,Int32 altura,String caminhoThumbs,Int32 larguraThumb,上传.ProcessRequest(HttpContext上下文)中的Int32 alturaThumb,Boolean geraXml)

该过程与用户NT AUTHORITY \ NETWORK SERVICE一起运行。 IIS配置为使用匿名身份validation。 匿名用户是管理员,我将其设置为允许应用程序运行而不必担心权限。

在我的开发机器上,我有办公室2010 beta1。 我已经使用Office 2007测试了可执行文件。 如果我从服务器中的可执行文件运行代码,安装了Office 2003,它就可以完美运行。

为确保权限不会出现任何问题,服务器中的每个人都可以完全访问该网站。 该网站在IIS7和经典模式下运行。

我还听说Open-office有一个能够做到这一点的API,但我找不到任何关于它的东西。 我不介意使用DLLImport做我必须做的事情,我可以在Web服务器上安装open-office。 不要担心重写这个方法,只要参数相同,一切都会起作用。

我感谢您的帮助。

不要从ASP.NET应用程序使用Office Interop。 请参阅Office的服务器端自动化的注意事项 。

但是,如果您没有其他选择,则需要在Windows Server 2008上创建以下目录以使其正常工作:

Windows 2008 Server x64:C:\ Windows \ SysWOW64 \ config \ systemprofile \ Desktop Windows 2008 Server x86:C:\ Windows \ System32 \ config \ systemprofile \ Desktop

在考虑在服务器上使用Office Automation时,您可能需要阅读以下知识库文章中的信息。

http://support.microsoft.com/kb/257757

上述链接中的关键短语

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

而且我可以确认上述情况是真的,而不只是MS试图阻止你……

在我的情况下(将演示文稿转换为video,我与开放的东西有非常相似的问题)这有助于:

创建以下目录:

C:\ WINDOWS \ Syswow64资料\ CONFIG \ systemprofile \桌面

C:\ Windows \ System32 \ config \ systemprofile \ Desktop(我没有这个)

我的操作系统是Windows Server 2012 R2 Standard

Interop库要求将相关应用程序安装在运行它们的计算机上。 即,为了使其在您的生产服务器上运行,您需要在该服务器上安装Office。 这通常是一个糟糕的主意。 设置类型存在许多问题,因为每次有人发出请求时,都会启动相关应用程序的新实例(在您的情况下为PowerPoint)。

如果要在中央服务器上解析PowerPoint文件,则应使用读取PowerPoint文件的库。 我知道Aspose制作这样的产品(Aspose.Slides),但也有其他产品。

如果文档位于PowerPoint 2007中,您可以解析Open Office XML以获取所需的数据。 有关更多信息,请参阅Office简介(2007)Open XML文件格式和Open XML SDK 2.0 for Microsoft Office 。

我可能错了,最近开始研究类似的事情。 但是,您不应该在计算机上安装办公室来创建或编辑2007+ office文件。 它们基本上是具有不同扩展名的zip文件。 如果您将其重命名为.zip,您应该看到所有文件并能够直接编辑它们。

然后可以解压缩,所有文件都在那里。 您可以以类似的方式创建新文件

不要从ASP.NET应用程序使用Office Interop。 请参阅Office的服务器端自动化的注意事项 。

但是,我只想在此注意,我必须在使用Office 2010的Windows 7 Professional 64位计算机上执行Murthy Pantham所描述的修复。它没有安装Windows 7 Service Pack 1或Office 2010 Service Pack 3。 所以这里的教训显然是修复不仅限于Server 2008.希望这有助于某人。