12

我的项目中有以下 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 文件。[/编辑]

--- 阿利斯泰尔。

4

4 回答 4

35

我找到了以下页面:

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 强制执行给定的语句。

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

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

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

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

我试过这个,它很管用!谁能解释为什么需要它以及任何缺点?

谢谢,

--- 阿利斯泰尔。

于 2013-07-09T11:28:20.193 回答
4

以管理员身份运行程序,除非用户以管理员身份运行,否则程序无法访问 C:/。您可以通过更改 ApplicationManifest 使您的程序提示用户必须以管理员身份运行:如何强制我的 .NET 应用程序以管理员身份运行?

于 2013-07-08T15:49:47.430 回答
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 有该文件夹,我认为它会导致此错误。

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

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

于 2015-06-17T13:20:50.997 回答
0

我今天遇到了这个问题。

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

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

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

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

于 2020-06-24T13:42:52.107 回答