无法在 C# 中打开 Excel 文件

2024-01-20

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

——阿利斯泰尔。


我找到了以下页面:

http://social.msdn.microsoft.com/Forums/en-US/b81a3c4e-62db-488b-af06-44421818ef91/excel-2007-automation-on-top-of-a-windows-server-2008-x64 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 less。 Windows Server 2008 和 Excel 2007 似乎强制执行给定的语句。

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

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

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

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

我已经尝试过了,效果很好!谁能解释为什么需要它以及有什么缺点吗?

Thanks,

——阿利斯泰尔。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法在 C# 中打开 Excel 文件 的相关文章

随机推荐

  • git Notes 是将类别样式信息添加到提交的预期方法吗?

    答案是我可以将元数据添加到 git 提交吗 或者我可以在 gitk 中隐藏一些标签吗 https stackoverflow com questions 2683248 can i add metadata to git commits o
  • 这段代码定义明确吗?

    这段代码取自正在进行的讨论here https stackoverflow com questions 4638364 undefined behavior and sequence points reloaded 4638718 4638
  • 如何每周发送 100,000 封电子邮件? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何从 AJAX 请求返回值? [复制]

    这个问题在这里已经有答案了 我有一个函数声明一个变量var关键词 然后 它启动 AJAX 请求来设置变量的值 然后从函数返回该变量 然而 我的实施失败了 我不知道为什么 这是代码的简化版本 function sendRequest some
  • Swift:转换到新场景后取消分配 GameScene?

    所以我读过几个关于这个问题的问题 但大多数都是 Objective C 的 我还没有找到任何直接解决 回答这个问题的问题 我是这里编程的新手 所以请彻底解释任何建议 我需要了解如何解除分配游戏结束后我的游戏场景到达 我需要这样做的原因是因为
  • GridBagLayout 网格化不起作用

    我正在尝试创建以下 GUI 但我制作的 GUI 是 我的网格是什么样的 image 网格布局 https i stack imgur com Wpzna png 我不明白为什么我会得到这个输出 因为我已经绘制了一个图表来帮助代码并且它似乎可
  • Java 使用带有域和安全的 RestTemplate 设置安全 cookie

    除了下面的问题之外 我如何设置 Cookie 域并标记为 安全 尝试在 Cookie 上设置其他属性 使用 RestTemplate 设置安全 cookie https stackoverflow com questions 5796078
  • 从 git 存储库进行 pip 安装,由于引用错误而出现错误

    问题描述 在 Windows 10 上使用 Python 3 7 6 我尝试升级直接从 git 存储库安装的包 pip install upgrade git https url of my py package git 然后安装失败 er
  • 如何读取pickle文件?

    我创建了一些数据并将其存储了几次 如下所示 with open filename a as f pickle dump data f 每次文件大小增加 但是当我打开文件时 with open filename rb as f x pickl
  • Android获取颜色作为字符串值

    如果我在资源中定义了一种颜色
  • F#,主格或结构类型

    F 有主格类型系统还是结构类型系统 我知道 OCaml 是结构类型的 尽管 F 似乎并非如此 这是正确的吗 F 是主格 您可以通过一些奇异的机制执行一些结构技巧 但该语言的类型系统主要是主格的
  • 使用 ESC 键清除 Angular / AngularUI 中的输入文本字段

    在我的 Angular 应用程序的几个地方 我需要使用 ESC 键清除用户的输入 问题是 我不知道如何使用文本输入字段 文本区域清除正常 看看这个小提琴 jsFiddle演示问题 http jsfiddle net aGpNf 188 Bi
  • 在textview中显示计时器包含android中的天,小时,分钟和秒

    我正在使用倒计时器在文本视图中显示剩余时间 它工作正常 下面是代码 public class MyCount extends CountDownTimer Context mContext public MyCount long milli
  • 如何在文本框中选择文本,并将插入符号置于所选内容的开头?

    我正在使用一个System Windows Forms TextBox 可以使用键盘来选择文本 将插入符号置于start选择的内容 按住 Shift 并将插入符号向左移动 我想以编程方式做同样的事情 例如 假设我有一个文本框 其中包含文本
  • 如何在调试器中使用 Perl 5.10 功能?

    我无法在 Perl 调试器中评估 现代 Perl 代码 在调试文件中的代码时它可以正常工作 但在提示符下却不行 最小的例子 Activating 5 10 features with E it works perl E say x x Ca
  • 为什么要为请求缓存控制 HTTP 标头?

    我最近经历了this https developer mozilla org en US docs Web HTTP Headers Cache Control文章 它说不仅是响应 请求还可以包括cache control选项 虽然我理解
  • 低基数字段的索引效率

    例如 postgres 数据库中有一个字段 可以为空 它存储枚举值 并且该枚举只有两个值 A B 现在我的所有选择查询在该字段上都有 where 子句 我有一个问题 向该字段添加索引将是一个好方法 否则它不会提高任何性能 因为每行包含 A
  • 如何在 php 上打印非空值[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我对 PHP 很陌生 现在我正在尝试打印非空值 我有以下 php 代码 它会抛出所有值 包括 null 和非 null 在我的网站中 我只
  • 如何检查 JBoss 是否正在 Unix 服务器上运行?

    我下面有一个脚本 我想根据它是否可以在进程列表中找到 jboss 进程来回显 jboss 未运行 或 jboss 正在运行 但是 当我关闭 Jboss 时 它仍然执行 Else 条件并显示 jboss 正在运行 如果我手动执行 pgrep
  • 无法在 C# 中打开 Excel 文件

    我的项目中有以下 C 函数 该函数应该打开并返回现有的 Excel 工作簿对象 Application excelApp private Workbook OpenXL string path string filename try if