Microsoft Excel无法访问文件" ..."。 Windows Server 2008 R2与Microsoft Office 2010有几种可能的原因

时间:2015-02-21 00:37:39

标签: c# excel

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

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

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

Microsoft Excel无法访问文件" ..."。有几个可能的原因:

- 文件名或路径不存在。

- 该文件正由另一个程序使用。

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

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

  1. 创建目录“C:\ Windows \ SysWOW64 \ config \ systemprofile \ Desktop”(对于64位Windows)或“C:\ Windows \ System32 \ config \ systemprofile \ Desktop”(对于32位Windows)。然后在上面的桌面目录上设置完全控制权限(例如在Win7& IIS 7& DefaultAppPool中为用户“IIS AppPool \ DefaultAppPool”设置权限)
  2. 更改了Microsoft Excel应用程序的DCOM配置,以包含此用户以进行本地/远程启动和访问
  3. 在Excel中启用所有宏并设置信任中心。
  4. 添加用户以完全控制包含Excel文件的所有文件夹。
  5. 在DCOM配置下,Microsoft Excel应用程序,如果我修改“身份”选项卡以检查"此用户"并输入用户名/密码,让Excel始终在该用户下运行。然后应用程序运行完美。但是,其他用户无法自行运行excel应用程序,并出现以下错误:"无法使用对象链接和嵌入"。如果我检查"使用启动用户",则无法启动Excel。在任何地方检查日志或事件都没有错误。
  6. 然而,仍然是同样的错误。我认为这是允许的,但我不知道在哪里以及如何做到这一点。

    现在,通常情况下,当我运行这个excel报告时,我可以双击该文件并自动运行,将新参数保存到当前文件中并生成一个新的excel文件(附加日期为文件名)。这意味着对原始文件进行了更改(保存)。

    感谢您的帮助!

3 个答案:

答案 0 :(得分:5)

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

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

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

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

这有效!

答案 1 :(得分:2)

Microsoft Excel无法访问Server 2012 Excel 2016中的文件..在线检查各种解决方案以在C:\ Windows \ SysWOW64 \ config \ systemprofile \ desktop中创建文件夹桌面..没有为此工作但后来我在System32中添加了一个文件夹桌面,这绝对有效。

由于我安装了64位Excel,因此正确的目录就是 C:\ WINDOWS \ system32 \设置\ systemprofile \桌面

答案 2 :(得分:0)

我遇到了另一种方法,你可以得到这个错误:当你尝试使用"非法"名称,例如其中包含whacks(正斜杠)的名称。

出于这个原因,错误的msg将这个作为问题的一个可能解释,但是......不!似乎是合理的。

具体来说,我试图保存一个名为 C的文件:\ RoboReporter \ ABUELITOS \ 20160524_1327 \ ABUELITOS - 填充率 - 4 \ 1 \ 61910B10

whacks(在复制的异常文本中显示为回溯,但在调试时将鼠标悬停在值上时被视为向前突发)是导致混乱的原因。一旦我通过用下划线替换whacks来修复它:

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

......一切都在游泳。