我有一个非常简单的网络表单,可以让用户选择报告,他们想要的一个特定报告在xls中使用漂亮的格式而不是CSV。我使用COM INTEROP和excel 2007一起编写了报告。它可以在我的本地机器上运行并且可以编写文件,但是在Web服务器上它失败并出现此错误:
由于没有足够的可用内存或磁盘空间,Microsoft Office Excel无法打开或保存更多文档。
•要提供更多可用内存,请关闭不再需要的工作簿或程序。
•要释放磁盘空间,请从要保存的磁盘中删除不再需要的文件。
服务器上有足够的磁盘空间,所以我认为不是 - 这可能是权限问题吗?我已经升级了ASPNET和NETWORK SERVICE帐户,以便编写和修改我们正在保存报告的文件夹的访问权限 - 但仍然没有乐趣。有什么想法吗?
我是否需要使用特定用户帐户调用com对象,或者可以将interop调用提升为管理员帐户?知道怎么做吗?
答案 0 :(得分:1)
对不起,伙计们,把它分类。
塞尔你已经到了一半了。我最终以管理员身份运行Excel:在组件服务中,选择excel应用程序并选择admin作为运行它的用户。似乎工作一周没关系,它会得到:)
全部谢谢!
答案 1 :(得分:1)
SpreadsheetGear for .NET将允许您使用IWorkbook.SaveToStream将xls和xlsx工作簿直接保存到响应流。它是所有安全的托管C#代码,因此不需要以管理员身份运行任何东西,您将不会遇到Excel COM Interop带来的ASP.NET服务器上的问题。
您可以使用SpreadsheetGear here查看一些简单的ASP.NET Excel报告示例(C#和VB)并下载免费试用here。
免责声明:我拥有SpreadsheetGear LLC
答案 2 :(得分:0)
您可能希望对您的ASPNET进程使用模拟;以下是有关如何执行此操作的一些信息和示例:killing a win process from a C# console application: How do I set permissions?有关假冒的更多信息How to implement impersonation in an ASP.NET application