无法使用Excel Interop调度程序

13

我开发了一个使用Excel互操作的C# .NET控制台程序。在我的开发机和Windows Server 2008上,如果我从命令行运行它,程序可以正常工作。

但是,当我尝试安排一个每日运行的任务时,我遇到了这个烦人的Interop错误:

02/11/2011 00:30:05,000 [1] FATAL My.Program [(null)] - Unable to Microsoft Office Excel open file 'E:\excel.xls' by one of several reasons: 

• The file name or path does not exist. 
• The file is being used by another program. 
• The workbook you are trying to save has the same name as the currently opened book. 

System.Runtime.InteropServices.COMException (0x800A03EC): Unable to access the Microsoft Office Excel file 'E:\excel.xls' by one of several reasons: 

• The file name or path does not exist. 
• The file is being used by another program. 
• The workbook you are trying to save has the same name as the currently opened book. 
  in Microsoft.Office.Interop.Excel.Workbooks.Open (String Filename, Object UpdateLinks, Object ReadOnly, Object Format, Object Password, Object WriteResPassword, IgnoreReadOnlyRecommended Object, Object Origin, Object Delimiter, Object Editable, Object Notify, Object Converter, Object AddToMru, Object Local, Object CorruptLoad) 

我的程序需要完全关闭'e:\excel.xls'文件后才能启动,因为如果我尝试在命令行中运行相同的程序,它会如预期一样结束。

我还将我的任务设置为以管理员身份运行,因此不应该存在权限问题。

你能帮助我吗?


你解决了这个问题或找到了解决方法吗?我也遇到了完全相同的问题,能否请您发布您的解决方案?谢谢! - dpac
6个回答

23

太好了!这个解决方案立刻解决了我的问题。我正在安排一个C#应用程序。 - Rich
谢谢。我也遇到了同样的问题。 - RBalm
1
这解决了我的问题,同时在计划任务属性中勾选“以最高权限运行”复选框。 - ytoledano
对我也起作用了。供参考,我的设置是:Windows 7,安装了Excel 2010和2013,并且计划任务开启了“使用最高权限运行”,并配置为:“Windows 7,Windows Server 2008 R2”。 - dotNetkow

6
简而言之,请确保使用任务计划程序的配置文件具有适当的权限来创建这些文件夹,并且该文件夹未被设置为只读:
C:\Windows\System32\config\systemprofile\Desktop C:\Windows\SysWOW64\config\systemprofile\Desktop 如果仍然无法解决问题,请执行以下操作:
从开始菜单中,单击“运行”,并键入Dcomcnfg.exe。 在组件服务中,单击控制台根,展开组件服务,展开计算机,展开我的计算机,展开DCOMConfig。 搜索相关的应用程序,例如Microsoft Word 14.0对象库。 单击它。 右键单击并选择“属性”。 在安全选项卡上,在“启动和激活”部分中选择“自定义”。 单击编辑并添加应用程序池的标识,该应用程序池是您的应用程序正在其中运行的。 对于“访问权限”,请重复上述步骤。

3
在以下路径下创建一个名为“Desktop”的文件夹:
“C:\windows\system32\config\systemprofile\Desktop”
以及
“C:\windows\SysWow64\config\systemprofile\Desktop”(适用于 64 位操作系统)
为运行服务的用户授予该文件夹的完全访问权限。这将解决您的问题。

1

当您从计划任务执行Office自动化时,可能会出现一些奇怪的问题,因此建议尝试使用不同的用户帐户。

如果在登录时可以正常工作,则建议设置任务计划程序以在您的帐户下运行。如果仍然有效,则创建一个具有与您的帐户相同权限的新帐户,并使其在该帐户下运行。

否则,请尝试以管理员帐户登录,并确保在以管理员身份登录时应用程序运行。例如,也许在用户进行第一次交互式登录或类似操作期间设置了Office的某些部分。


正如我所说,我已经设置了计划任务以管理员身份运行。 - muek
@muek:这并不是对我的回答的回应,除非“Administrator”是您通常登录的账户?我的回答与权限关系不大,而是关于两个账户下是否设置了相同的配置。 - Hans Olsson
我在控制台或计划任务中运行的账户是相同的。 - muek
@muek:好的,那我恐怕不知道原因是什么了。 - Hans Olsson

1
文件 'e:\excel.xls' 存在。
实际上并不存在。映射的驱动器字母(如 E:)是每个用户独立的。该驱动器仅在您的用户帐户下有效,计划任务可能使用另一个帐户运行。与其调整帐户,最好的方法是使用通用名称。例如 \\server\share\excel.xls,这对任何帐户都有效。在 serverfault.com 上提出更多问题。

该文件已存在。E盘不是映射的驱动器,它是一个真实的驱动器。 - muek

0

我曾经苦苦挣扎,试图让它正常工作。我在谷歌上找了很多资料,以为通过一个帖子中的下拉菜单可以解决问题,该下拉菜单允许您在设置计划任务时选择XP作为“配置”选项,但只有在从头开始创建任务时才能使用XP选项。只要计划任务的所有者实际上登录到机器上,这种方法就可以正常工作。

最终,我通过调整身份和在面板上硬编码用户来在DCOM配置中纠正了它。


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