如何解决“Microsoft Excel无法打开或保存更多文档”的问题。

27

我正在使用 IIS 7.5 在 Windows 7 64 位操作系统上运行 C# ASP.NET 4.5 Web 应用程序。应用程序池的名称为“ASP.NET v4.0”,其标识为 ApplicationPoolIdentity。应用程序使用 MS Office Interop(Microsoft Excel 14.0 对象库)。

wBook = wBooks.Add(Missing.Value); 这一行,它抛出以下错误:

由于没有足够的可用内存或磁盘空间,Microsoft Excel 无法打开或保存任何其他文档。

u2022 要释放更多内存,请关闭您不再需要的工作簿或程序。

u2022 要释放磁盘空间,请从您要保存到的磁盘中删除不再需要的文件。: at Microsoft.Office.Interop.Excel.Workbooks.Add(Object Template)

1) 我在 DCOM 配置中给予了 IIS apppool\ASP.NET v4.0 对 MS Excel 应用程序的完全控制。

2) 我在 'C:\Windows\SysWOW64\config\systemprofile' 上为 IIS apppool\ASP.NET v4.0 分配了完全控制,并在其中创建了一个桌面文件夹。

3) 尽管不推荐使用,但我需要继续使用 Interop。

4) 应用程序在 Windows Server 2003/Windows XP 32 位上运行良好。

5) 机器上安装了 MS Office 2010(64 位,试用版)。

6) 我不想将应用程序池标识从 ApplicationPoolIdentity 更改为 Network Service 等。ApplicationPoolIdentity 是 IIS 7 中的新类型的标识,并且是推荐使用的。

如果我在 DCOM 配置中选择“交互式用户”(我已经登录为管理员),它可以正常工作,但会导致其他问题。我需要使用“启动用户”,即 ASP.NET v4.0。所以看起来这是一个权限问题。

请帮忙解决。谢谢。


1
有足够的磁盘空间和内存,所以这不是问题所在。因此我还没有能够解决它。 - engg
3
为了能够从 Web 应用程序中使用 Excel,您几乎肯定需要更改应用池正在运行的身份验证用户,使其成为先前交互登录并运行过 Excel 的用户。或者,您可以将 DCOM 配置更改为特定用户,而不是启动或交互,并提供管理员用户的登录详细信息以进行测试,看是否有任何差异。 - Nanhydrin
谢谢Nanhydrin,那可能会起作用。为什么ApplicationPoolIdentity不起作用? - engg
你可能每次生成文档时都使用了多个Excel实例? - Ruchi
不,只有一个实例。 - engg
1
@Ken,你不应该把每个错误信息都当作圣经一样信任。看看我的回答。这个问题与内存或磁盘空间完全无关。 - Tony_Henrich
7个回答

43

在文件资源管理器中右键单击文件,选择属性,然后选择常规选项卡并点击解除锁定按钮。这个错误信息非常误导。


如果您无法看到此按钮,则意味着该文件未被阻止,您应该寻找另一种解决方案。 - Pavel K
部署完我的应用程序后怎么办?这似乎不是一个好的解决方案,因为它看起来是机器特定的。 我将我的应用程序托管在Windows Azure上,但是出现了错误,该怎么办? - Neo
5
我应该右键点击哪个文件?请您能更具体些吗? - silkfire

20

打开注册表编辑器 (运行 | regedit) HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders

修改键值 Cache 为类似于 C:\Windows\Temp 的内容。

我的类似问题通过这种方法解决了。

祝好,

Ripley


真是太生气了,直到看到这个,救星! - Dr Archer
在尝试了其他方法数小时后,这个方法终于对我起作用了。谢谢!(附注:我更改了HKCU和HKLM,所以我不确定哪一个起作用了...因为在真正运行时没有人会登录...也就不会有CU)。 - AWhatley
1
绝对的英雄!我无法打开任何Excel文档。尝试了网上建议的所有方法。最终这个方法奏效了。 - Luigi Plinge
哇,真的是整天研究这个并尝试所有其他建议,这个方法起作用了。谁知道自动创建和发送电子表格会如此困难? - KAThompson

7

我曾经遇到过同样的问题,但是我的服务器机器内存没有问题,最终我通过以下步骤解决了这个问题:

  1. 在你的应用程序托管服务器中,进入"组件服务"
  2. enter image description here

3.在右侧找到"Microsoft Excel Application"。

4.右键打开其属性。

5.在"标识"选项卡下选择交互式用户并点击确定按钮。

再次检查。希望能够有所帮助。

注意:但是现在你可能会遇到另一个COM错误"Retrieving the COM class factory for component..."。在这种情况下,只需将身份设置为此用户,并输入具有足够权限的用户的用户名和密码。在我的情况下,我输入了一个power user组的用户。


5

像这样进行测试。有时会出现权限问题。

命令 => dcomcnfg

点击

组件服务 >计算机 >我的电脑>Dcom配置>并选择微软Excel应用程序

右键单击微软Excel应用程序

属性>授予Asp.net权限

选择身份表 >选择交互式用户 >选择ok


我找不到 Asp.net 权限 部分。 - KZee

2

我也遇到了同样的情况,在谷歌上搜索了几次后找到了两个解决方案。希望这能帮到你。

方法一:

在尝试用Excel打开文件之前,先在Windows资源管理器中找到它。右键单击文件并选择属性。在常规选项卡的底部,点击取消锁定按钮。一旦你取消了一个文件的锁定,Windows应该会记住,Excel也不会再问你了。 这个选项对一些文件类型是可用的,但对其他文件类型则不可用。如果你没有取消锁定按钮,则使用方法二。

方法二:

如果你通常将下载的Excel文件存储在一个文件夹中,那么这个选项更好。在Excel中,点击文件»选项»信任中心»信任中心设置»受信任位置。点击添加新位置。浏览到你存储Excel文件的文件夹,选择此位置的子文件夹也是受信任的,并点击确定。


当你从一个来源复制粘贴时,至少应该提供一个链接。 - LoMaPh

0

在 DCOM 配置中授予必要的权限后,我还需要将我的应用程序身份更改为 自定义帐户 才能在 IIS 中运行。


0
如果以上方法都不起作用,请尝试以下方法:
  • 组件服务 > 计算机 > 我的电脑 > Dcom config > Microsoft Excel 应用程序 > 属性 中,转到安全选项卡,单击所有三个部分上的自定义,并添加要运行应用程序的用户,并为该用户授予完全权限。

  • 转到 C:\Windows\Temp,确保它存在且不提示您输入。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接