微软办公软件Excel无法访问文件'c:\inetpub\wwwroot\Timesheet\App_Data\Template.xlsx'。

58

我有以下代码:

Microsoft.Office.Interop.Excel.Application oXL = null;
Microsoft.Office.Interop.Excel.Sheets sheets;
Application excel = new Microsoft.Office.Interop.Excel.Application();


excel.Workbooks.Add(System.Reflection.Missing.Value);

/*
    * Here is the complete detail's about Workbook.Open()
    * 
    *  Excel.Workbooks.Open(String Filename, Object UpdateLinks, Object ReadOnly, Object Format, 
    *  Object Password, Object WriteResPassword, Object IgnoreReadOnlyRecommended, Object Origin,
    *  Object Delimiter, Object Editable, Object Notify, Object Converter, Object AddToMru, Object Local, Object CorruptLoad)
    */

Workbook workbook = excel.Workbooks.Open(
    System.Web.HttpContext.Current.Server.MapPath("~/App_Data/Template.xlsx"),
    Missing.Value, true, Missing.Value, Missing.Value,
    Missing.Value, Missing.Value, Missing.Value,
    Missing.Value, Missing.Value, Missing.Value,
    Missing.Value, Missing.Value, Missing.Value,
    Missing.Value);
sheets = workbook.Worksheets;

现在来看这行代码:

workbook = excel.Workbooks.Open(
    System.Web.HttpContext.Current.Server.MapPath("~/App_Data/Template.xlsx"),
    Missing.Value, true, Missing.Value, Missing.Value,
    Missing.Value, Missing.Value, Missing.Value,
    Missing.Value, Missing.Value, Missing.Value,
    Missing.Value, Missing.Value, Missing.Value,
    Missing.Value);

在 Visual Studio(F5)中可以直接运行该文件,但尝试通过 IIS 访问时却无法工作。

Microsoft Office Excel 无法访问文件 'c:\inetpub\wwwroot\Timesheet\App_Data\Template.xlsx'。可能有以下几个原因:
• 文件名或路径不存在。
• 文件正在被其他程序使用。
• 您要保存的工作簿与当前打开的工作簿同名。

我已经尝试了以下解决方法:

  • 确保文件夹和文件存在,并在文件所在文件夹中将访问权限分别授予 IUSR_###(IIS 用户)和 ASPNET 用户。
    • 在“组件服务”(DCOM)中为适当的用户授权。

我已经为存放模板(.xlsx)的文件夹授予所有权限。

有什么建议吗?

9个回答

135

试试以下方法:

  1. 创建目录

C:\Windows\SysWOW64\config\systemprofile\Desktop

(对于64位Windows计算机上32位Excel/Office的版本),或者

C:\Windows\System32\config\systemprofile\Desktop

(适用于32位Windows计算机上32位Office的版本或64位Windows计算机上64位Office的版本)。

  1. 对于桌面目录,为相关用户添加完全控制权限(例如,在Win7和IIS 7及DefaultAppPool中,为用户IIS AppPool \ DefaultAppPool设置权限)。

原帖含答案:


2
应该确认原始数据。 - Michael Dausmann
3
有没有人能解释这种行为? - Florin Bombeanu
我在升级到Windows 7后遇到了这个错误。微软是不是忘记将其作为Office安装的一部分放入此文件夹中了?他们真的那么愚蠢吗!尽管如此,我仍然有兴趣找出是否确实是这种情况。 - name_masked
天啊!我花了好几天才解决这个问题。问题终于解决了,谢谢老兄! - devHead
1
将System32文件夹添加到Win10 x64 21H2上的Office 2021中解决了使用Microsoft.Office.Interop.Excel 15.0和.Net 4.72编写的程序的问题,因此问题仍然存在。 - avenmore
显示剩余8条评论

20

请注意,在我的电脑上,添加c:\windows\syswow64\config\systemprofile\desktop目录并没有起作用。

关键在于WOW64代表Windows on Windows64,这意味着它实际上适用于在64位操作系统上运行的32位程序。

由于我安装了64位的Excel,正确的目录应该是c:\windows\system32\config\systemprofile\desktop


1
好的提示!我已经搜索了两天如何解决这个问题,这个备用目录解决了我的问题,使用的是Windows Server 2016和64位Excel 2016。 - Taylor Francis
1
我的问题通过采用这种方法得到了解决。谢谢。 - Werdo
我在Windows 11上使用Excel 16.0 64位版本也遇到了同样的问题,我已经将C:\Windows\system32\config\systemprofile\Desktop文件夹的完全控制权赋予了我的用户。 - Jonathan Larouche

10
在我的情况下,我按照这里提供的建议解决了问题。
步骤如下:
  1. 运行 dcomcnfg
  2. 进入 Console Root \Component Services\Computers\My Computer\DCOM Config\Microsoft Excel Application 路径
  3. 右键点击 Microsoft Excel Application
  4. 选择 属性
  5. 进入 Identity 标签
  6. 选择 The interactive user.
如果在第2步中找不到该路径,则尝试运行 mmc comexp.msc /32 代替 dcomcnfg

1
我的问题通过采用这种方法得以解决。谢谢。 - milad shafiei
这是唯一解决我的问题的方法。谢谢! - Mohammad Anini
这对我很有效,谢谢你! - Sunil Mathari
这对我也起作用了(可能与目录解决方案结合使用,并给予桌面目录适当的权限 - 因为我首先这样做了,但仍然没有成功)。只想指出,如果我在IIS中使用ApplicationPoolId作为身份标识,则对我无效,但使用“本地系统”或“自定义帐户(Windows用户和密码)”有效。此外,在您执行步骤5的同一窗口中,如果转到安全性,请检查您是否也具有正确的权限。 - Spluf

1
我想在Eric Bonnot的回答中补充一些内容: 这个答案在我使用非管理员用户和powerpoint PIA的IIS服务器上部分有效。 我注意到,如果pptx文件中有媒体(例如图片),则无法打开它。 "hack"是在systemprofile/AppData目录上也为Windows用户(使用PIA的用户)添加权限。 希望这能帮到你。

1
以下解决方案对我起作用。
创建目录C:\Windows\SysWOW64\config\systemprofile\Desktop。

0

我之前尝试过这个问题,然后解决了。

解决方案:

我将特定文件夹(子文件夹和文件)的完全权限设置为了可行,并检查了其是否正常工作。


0

我已经将我的WCF封装在Windows服务中。在一台机器上创建桌面文件夹确实解决了我的问题,但在另一台机器上却没有。

最终我的问题是,我的Windows服务未在机器的活动用户下运行。将服务配置为在机器上活动的用户下运行解决了我的问题。

只有以下组合:

  • 现有的桌面文件夹
  • 服务在真实用户帐户下运行

才让它对我起作用。

这篇文章引导我找到了完整的解决方案:无法访问Excel文件


0
在我的情况下,所提供的解决方案都没有起作用(更改dcom设置中的用户,创建桌面文件夹并为用户提供完全访问权限等)。
最终我意识到我安装了64位版本的Excel。卸载64位版本并安装32位版本的Excel解决了这个错误。这是在使用Windows 10和Microsoft Office Excel 2010时发生的。

-1

这个有效。

excel.exe /safe

这个无效,和正常启动Excel一样报错。

excel.exe /automation

对于任何网络文件,所有 MS Office 2007 应用程序都会出现这个问题。但本地文件访问没有问题。


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