【问题标题】:More C# Automating to Excel更多 C# 自动化到 Excel
【发布时间】:2011-01-25 02:38:36
【问题描述】:

这会启动一个新的 Excel 工作簿:

        Excel.Application oXL;
        Excel._Workbook oWB;

        oXL = new Excel.Application();
        oXL.Visible = true;

        oWB = (Excel._Workbook)(oXL.Workbooks.Add( Missing.Value ));

但是,如果一个人想要...

-- 'GetObject'(在熟悉的自动化范例中)到已经加载并在屏幕上打开的工作簿?,或者

-- 通过路径名访问和写入数据到关闭的工作簿?

按照旧标准,这两者都是可行的。最好是后者,尽管我现在不是选择者。感谢您的帮助。

【问题讨论】:

  • 标记更多特定于您问题的主题,以吸引那些可以帮助您找到答案的人。
  • 谢谢。我怎么做?我是否必须重新输入问题并将其发送到每个单独的标签,或者有​​没有办法只获取这篇文章并为其分配更多标签?

标签: c# .net excel ms-office office-interop


【解决方案1】:

您可以使用以下方法获取现有的 Excel 实例:

Marshal.GetActiveObject("Excel.Application")

如果没有运行 Excel 实例,这将引发 COMException。

自动化可见的 Excel 实例的一个缺陷是,您的调用可能会因为 Excel 忙而失败。你可能需要实现IMessageFilter 来避免这个问题。

至于通过路径访问已关闭的工作簿 - 您需要打开工作簿:

oXL.Workbooks.Open(...)

【讨论】:

  • 乔,感谢元帅提供的信息。非常有帮助;我不知道。 (关于 .Open,我在发布之前尝试过它,它实际上已经在屏幕上启动了一个实例,所以我将使用 Marshalling 对关闭的文件进行一些研究,以防止它们像以前那样显示COM 中的 XL 对象。)
  • 那是很久以前的事了,我不记得在从未启动和显示实例的文件上使用的方法。也许在 C# 中 ExcelObj.Visible = false;旨在产生相同的结果。再次感谢。
  • 是的,如果你不想显示 UI,你应该有 .Visible=false
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-27
  • 2011-07-29
  • 2012-01-22
  • 1970-01-01
  • 2022-12-19
  • 2014-05-17
  • 1970-01-01
相关资源
最近更新 更多