Microsoft Excel不能访问文件“…”。 Windows Server 2008 R2与Microsoft Office 2010有几个可能的原因

我在特定用户下启动Excel应用程序时遇到问题。

我尝试通过应用程序X(不是Windows任务计划程序)安排此脚本(C#),并且此应用程序将始终使用服务帐户在服务器上运行服务。 如果我在同一个用户下的命令提示符下运行C#脚本,它将运行。 在使用完全相同的用户的应用程序X下启动C#脚本,它不能打开Excel应用程序(没有足够的权限?)。

这个脚本调用:app.Workbooks.Open(ExcelFileName,0,false,Type.missing ….),但它给出了以下错误:

Microsoft Excel不能访问文件“…”。 有几个可能的原因:

– 文件名或path不存在。

该文件正在被另一个程序使用。

– 您尝试保存的工作簿与当前打开的工作簿具有相同的名称。

我尝试了我在网上find的所有方法都无济于事。

  1. 创build目录“C:\ Windows \ SysWOW64 \ config \ systemprofile \ Desktop”(适用于64位Windows)或“C:\ Windows \ System32 \ config \ systemprofile \ Desktop”(适用于32位Windows)。 然后在上面的Desktop目录中设置完全控制权限(例如,在用户“IIS AppPool \ DefaultAppPool”的Win7&IIS 7&DefaultAppPool设置权限中)
  2. 更改了Microsoft Excel应用程序的DCOMconfiguration,以包含此用户的本地/远程启动和访问
  3. 启用Excel中的所有macros并设置信任中心。
  4. 添加用户以完全控制包含Excel文件的所有文件夹。
  5. 在DCOMconfiguration,Microsoft Excel应用程序,如果我修改标识选项卡检查“此用户”,并input用户名/密码,让Excel始终在该用户下运行。 然后,应用程序运行完美。 但是,其他用户不能自行运行Excel应用程序,出现以下错误:“不能使用对象链接和embedded”。 如果选中“使用启动用户”,则不能启动Excel。 日志或事件没有错误检查。

但是,仍然是一样的错误。 我认为这是允许的,但我不确定在哪里以及如何做这个工作。

现在,当我运行这个excel报告时,我可以双击文件并自动运行,将新参数保存到当前文件中,并生成一个新的excel文件(date附在文件名中)。 这意味着有一个更改(保存)到原始文件。

我感谢你的帮助!

我发现问题是在服务器的安全层!

在C:\ Windows \ System32 \ config \ systemprofile中创build桌面文件夹,并授予服务帐户访问桌面文件夹的权限是不够的。

我修改了C:\ Windows \ System32 \ config(或C:\ windows \ SysWOW64 \ config)文件夹以允许安全选项卡中的服务帐户。

然后,我还必须为服务帐户的子文件夹C:\ Windows \ System32 \ config \ systemprofile(或C:\ windows \ SysWOW64 \ config \ systemprofile)设置相同的权限。

这工作!

Microsoft Excel无法访问该文件在Server 2012年Excel 2016 ..检查各种解决scheme在线创build文件夹桌面在C:\ Windows \ SysWOW64 \configuration\ systemprofile \桌面..没有为此工作,但后来我添加了一个文件夹桌面System32和那肯定工作。

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

我跑过另一个方式,你可以得到这个错误:当你试图保存一个“非法”的名字的文件,如与其中的重击(正斜杠)。

出于这个原因,味精会给出这个解释问题的可能性似乎是合理的,但是不是!

具体来说,我试图保存一个名为C:\ RoboReporter \ ABUELITOS \ 20160524_1327 \ ABUELITOS – Fill Rate – 4 \ 1 \ 61910B10

重击(在复制的exception文本中显示为反击,但是在debugging时hover在值上时被看作是向前翻转)是造成混乱的原因。 一旦我解决这个问题,用下划线取代重复:

filename = String.Format("{0}\\{1} - Fill Rate - {2}.xlsx", uniqueFolder, _unit, _begDate.ToShortDateString()); filename = filename.Replace("/", "_"); 

一切都顺其自然