无法在C#中打开Excel文件

时间:2013-07-08 15:46:28

标签: c# excel-interop

我的项目中有以下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 :)和USB记忆棒打开该文件。一切都没有用。

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

--- Alistair。

4 个答案:

答案 0 :(得分:34)

我找到了以下页面:

http://social.msdn.microsoft.com/Forums/en-US/b81a3c4e-62db-488b-af06-44421818ef91/excel-2007-automation-on-top-of-a-windows-server-2008-x64

它说的是......

  

不支持自动化办公产品UI。似乎Windows Server 2008和Excel 2007强制执行给定的语句。

然后,提问者准确描述了我使用无法打开Excel文件的Windows服务的情况,尽管命令行程序中的相同代码没有问题。

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

  

Windows 2008 Server x64:C:\ Windows \ SysWOW64 \ config \ systemprofile \ Desktop

     

Windows 2008 Server x86:C:\ Windows \ System32 \ config \ systemprofile \ Desktop

我试过这个并且它有效!谁能解释为什么需要它和任何缺点?

谢谢,

--- Alistair。

答案 1 :(得分:4)

以管理员身份运行程序,除非用户以管理员身份运行,否则程序无法访问C:/。 您可以通过更改ApplicationManifest使程序提示必须以管理员身份运行的用户:How do I force my .NET application to run as administrator?

答案 2 :(得分:2)

我遇到了同样的问题 我已经调查了有关"注册表黑客的信息"。

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

此解决方案是......

·Windows 2008 Server x64

请创建此文件夹。

  C:\Windows\SysWOW64\config\systemprofile\Desktop

·Windows 2008 Server x86

请创建此文件夹。

 C:\Windows\System32\config\systemprofile\Desktop

...而不是dcomcnfg.exe。

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

在systemprofile文件夹中似乎需要一个Desktop文件夹来通过Excel打开文件。

它从Windows2008中消失,Windows2003有了该文件夹, 我认为这会导致这个错误。

我认为它比#34;注册表黑客更安全"。

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

答案 3 :(得分:0)

我今天遇到了这个问题。

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

迁移到Windows 10之后,某些事情(主要与IIS相关)仅在以Administrator身份运行Visual Studio时才起作用,因此迅速成为了以VS身份启动VS的习惯。

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

这可能与我们的工作环境的设置有关,但是我认为这是值得分享的,如果其他任何人遇到相同的问题,而其他解决方案也不适合他们。

相关问题