52

我的代码如下:-

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)所在文件夹的所有权限

有什么建议么??

4

7 回答 7

122

试试这个:

  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设置权限)。

带答案的原始帖子:

于 2011-09-12T11:12:51.883 回答
17

让我注意,在我的位置,添加 c:\windows\syswow64\config\systemprofile\desktop 目录不起作用。

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

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

于 2014-07-04T15:28:30.623 回答
7

就我而言,我遵循了此处提供的建议并解决了问题。

脚步:

  1. dcomcnfg
  2. 转到控制台根目录\组件服务\计算机\我的电脑\DCOM 配置\Microsoft Excel 应用程序
  3. 右键单击Microsoft Excel 应用程序
  4. 选择属性
  5. 转到身份选项卡
  6. 选择交互式用户。

在第 2 步中,如果找不到该路径,请尝试运行mmc comexp.msc /32而不是dcomcnfg.

于 2019-08-21T17:24:44.970 回答
1

我想在 Eric Bonnot 的答案中添加一些内容:当我在 IIS 服务器上使用powerpoint PIA的非管理员用户工作时,答案部分得到了解决。

我注意到如果这个文件中有媒体(例如图片),我无法打开一个 pptx 文件。

“hack”是在systemprofile/AppData目录上添加 Windows 用户(使用 PIA 的用户)的权限。

希望这可以帮助

于 2015-06-23T09:12:45.330 回答
0

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

解决方案:

我将完全权限放入特定文件夹(子文件夹和文件)并检查工作正常。

于 2013-07-25T08:54:02.850 回答
0

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

最后我的问题是,我的 Windows 服务没有在机器的活动用户下运行。到目前为止,将服务配置为在机器上处于活动状态的用户下运行为我解决了这个问题。

只有结合

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

让它为我工作。

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

于 2015-05-05T06:54:57.713 回答
-1

这有效

excel.exe /安全

这不会,并且会给出与常规 excel 启动相同的错误

excel.exe /自动化

对于任何网络文件的所有 MS Office 2007 应用程序也会发生这种情况。本地文件访问很好。

于 2012-12-31T19:32:42.967 回答