我在特定用户下启动Excel应用程序时遇到问题。
我尝试通过应用程序X(而不是Windows任务计划程序)安排此脚本(C#)。此应用程序将始终使用服务帐户在服务器上运行服务)。如果我在同一用户下的命令提示符下运行C#脚本,它将运行。在使用完全相同的用户的应用程序X下启动C#脚本,它无法打开Excel应用程序(没有足够的权限?)。
此脚本调用: app.Workbooks.Open(ExcelFileName,0,false,Type.missing ....),但它给出了以下错误:
Microsoft Excel无法访问文件" ..."。有几个可能的原因:
- 文件名或路径不存在。
- 该文件正由另一个程序使用。
- 您尝试保存的工作簿与当前打开的工作簿具有相同的名称。
我尝试了在网上找到的所有方法都无济于事。
然而,仍然是同样的错误。我认为这是允许的,但我不知道在哪里以及如何做到这一点。
现在,通常情况下,当我运行这个excel报告时,我可以双击该文件并自动运行,将新参数保存到当前文件中并生成一个新的excel文件(附加日期为文件名)。这意味着对原始文件进行了更改(保存)。
感谢您的帮助!
答案 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("/", "_");
......一切都在游泳。