C# 无法在C中打开Excel文件#

C# 无法在C中打开Excel文件#,c#,excel-interop,C#,Excel Interop,我的项目中有以下C#函数,用于打开并返回现有Excel工作簿对象: Application _excelApp; // ... private Workbook OpenXL(string path, string filename) { try { if (_excelApp == null) { _excelApp = new Application(); } Workbook wo

我的项目中有以下C#函数,用于打开并返回现有Excel工作簿对象:

Application _excelApp;

// ...

private Workbook OpenXL(string path, string filename)
{
    try
    {
        if (_excelApp == null)
        {
            _excelApp = new Application();
        }

        Workbook workBook = _excelApp.Workbooks.Open(path + filename,   // Name
                                                     0,                 // Do not update links
                                                     true);             // Open read-only

        return workBook;
    }
    catch (Exception e)
    {
        _excelApp = null;
        throw new ArgumentException("Error opening " + path + filename, e);
    }
}
但是当我使用“C:\”和“scratch.xlsx”运行它时,Open()调用抛出以下错误:

Microsoft Excel cannot access the file 'C:\scratch.xlsx'. There are several possible 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 a currently open workbook.
文件和路径确实存在:我已从错误消息中复制了路径,并将其粘贴到命令窗口中,文件将加载到Excel中。 文件未锁定:Excel可以很好地打开它,但我的程序无法打开,即使是在重新启动后。 我不是想保存它,我是想打开它,所以最后一个选项是不相关的

我不明白为什么这段简单的代码不起作用。如有任何建议,我们将不胜感激

[编辑] 我现在尝试从我的个人网络驱动器(M:)和U盘打开该文件。都没有用

该应用程序实际上是一个Windows服务,在本地系统帐户下运行并生成报告。它目前编写的CSV报告没有任何访问问题。我现在试图让它打开一个excel文件作为模板报告,并填写各种字段。打开Excel文件失败。我认为每个人都建议的管理员帐户选项是一种误导,因为它可以毫无问题地编写CSV文件。 [/编辑]


---Alistair。

以管理员身份运行程序,除非用户以管理员身份运行,否则程序无法访问C:/。
您可以通过更改ApplicationManifest使程序提示用户它必须以管理员身份运行:

我找到了以下页面:

上面写着

不支持在无UI的情况下自动化office产品。Windows Server 2008和Excel 2007似乎强制执行给定的语句

提问者接着准确地描述了我所处的情况,即Windows服务无法打开Excel文件,尽管命令行程序中的相同代码没有问题

响应建议创建以下文件夹:

Windows 2008服务器x64:C:\Windows\SysWOW64\config\systemprofile\Desktop

Windows 2008服务器x86:C:\Windows\System32\config\systemprofile\Desktop

我试过这个,效果不错!有人能解释为什么需要它以及它的缺点吗

谢谢


---Alistair.

我遇到了同样的问题 我调查了有关“注册表黑客”的信息

毕竟,我找到了另一个不改变注册表值的解决方案 一切正常

这个解决方案是

・Windows 2008服务器x64

请创建此文件夹

  C:\Windows\SysWOW64\config\systemprofile\Desktop
 C:\Windows\System32\config\systemprofile\Desktop
・Windows 2008服务器x86

请创建此文件夹

  C:\Windows\SysWOW64\config\systemprofile\Desktop
 C:\Windows\System32\config\systemprofile\Desktop
…而不是dcomcnfg.exe

这个操作消除了我系统中的办公自动化问题

systemprofile文件夹中似乎需要一个桌面文件夹才能通过Excel打开文件

它从Windows2008中消失,Windows2003中有文件夹, 我认为这是造成这个错误的原因

我认为这比“注册表黑客”更安全


如果您尝试此解决方案,请告诉我结果。

我今天遇到了此问题

令人惊讶的是,该错误似乎是在应用程序以管理员身份运行时发生的

在我们迁移到Windows10之后,有些东西(主要与IIS相关)只有在以管理员身份运行VisualStudio时才能起作用,因此以管理员身份启动VS很快成为一种习惯

解决方案是不以管理员身份运行应用程序


这可能与我们的工作环境的设置有关,但我认为如果其他人遇到同样的问题,而其他解决方案也不适用于他们,那么这是一种共享。

尝试以管理员身份运行?用户帐户是否对文件具有读取权限?您或c#是否正在转义``?请不要加入路径,如
path+filename
;使用
Path.Combine(路径,文件名)
代替!!您使用了哪个Excel互操作?对于Excel 2007或更高版本,它是否正确?Marco,我使用的是interop的14.0.0.0版(C:\Program Files(x86)\Microsoft Visual Studio 10.0\Visual Studio Tools for Office\PIA\Office14\Microsoft.Office.interop.Excel.dll),我还想补充一点,您的代码工作正常,没有任何问题。我支持这一点,假设所有类都按照我期望的方式运行,我看不出有什么问题。它最初是访问C:\Reports\。我将路径更改为C:\以使其更简单!如果您有D:\驱动器之类的分区或F:\之类的挂载驱动器,并且这只是一个测试/您不必费心编辑应用程序清单,请改用这些驱动器中的一个。@user41013:您是否尝试将路径与
路径合并。按照我上面的建议合并
?是的。我也有同样的问题。你的解决方案对我也适用。但是为什么呢?不知道为什么,我没有找到任何理由,已经完全忘记了。当我们很快迁移到新硬件时,它可能会再次绊倒我!我不知道为什么会这样,但我可以证实,它在2008年7月和2010年办公时救了我。是的,我不得不迁移到一个新的硬件,这又很有帮助,人们很容易忘记了这些东西。我的胸口有一个“user41013”纹身。工作起来很有魅力。事实证明,我在不知不觉中在我的开发机器中有这个文件夹(所以它工作了),但在部署机器中没有。谢谢!我有这个文件夹,但我需要授予它正确的权限。