首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用getActiveObject("Excel.Application")

如何使用getActiveObject("Excel.Application")
EN

Stack Overflow用户
提问于 2009-08-27 10:27:07
回答 4查看 13.3K关注 0票数 5

我需要在C#中完成一个应用程序。

现在我想获得一个控制Excel文件来获取数据的函数。

我使用了getActiveObject("Excel.Application"),但这不会返回任何内容。我不能在VS2008中使用Excel.Application,而是使用Microsoft.Office.Interop.Excel.Application

那么有没有其他方法可以做到这一点呢?

代码语言:javascript
复制
Microsoft.Office.Interop.Excel.Application e = (Microsoft.Office.Interop.Excel.Application)Marshal.GetActiveObject("Excel.Application");
EN

回答 4

Stack Overflow用户

发布于 2010-01-20 07:15:15

经过大约半天的尝试,我终于想出了如何让它工作,这样你就可以使用一个打开的excel了。我的用户一直在抱怨打开了太多的Excel实例。

以下是我为使其正常工作所做的一小段工作:

代码语言:javascript
复制
_Application excelApp;

try
{
  excelApp = (_Application)Marshal.GetActiveObject("Excel.Application");
}
catch(Exception)
{
  // this is important. If Excel is not running, GetActiveObject will throw
  // an exception
  excelApp = null;
}

if( excelApp == null )
{
  excelApp = new ApplicationClass();
}

我已经追寻了一段时间,终于有时间静下心来弄清楚了。

票数 3
EN

Stack Overflow用户

发布于 2018-08-07 18:13:50

我还一直在开发Excel插件,在命名空间中使用

代码语言:javascript
复制
using Excel=Microsoft.Interop.Office.Excel;

不使用Microsoft.Interop.Office.Excel,而是使用上面的代码,更多的理解请看我的代码:

代码语言:javascript
复制
using System.IO;
using System.Windows.Forms;
using System.Xml;
using System.Xml.Serialization;
using Excel = Microsoft.Office.Interop.Excel;
using Microsoft.Office.Interop.Excel;
using static MMCAPP2010.Profile;
using System.Runtime.InteropServices;

namespace MMCAPP2010
{
    public class ExcelTemplateLoad
    {
        public void DeserializeObject(string filename)
        {
            Excel.Application instance;
            Workbook wb = null;
            try
            {
                //getting the current running instance of an excel application
                instance = (Excel.Application)Marshal.GetActiveObject("Excel.Application");   
            }
            catch
            {
                instance = new Excel.Application();
            }

            //opening the template
            wb = instance.Workbooks.Open(@"C:\Users\U1152927\Downloads\sample.xltx");
票数 2
EN

Stack Overflow用户

发布于 2009-08-27 14:46:16

为了能够将Excel对象模型引用为"Excel",您可以通过名称空间(或文档)顶部的using语句创建一个别名,如下所示:

代码语言:javascript
复制
using Excel = Microsoft.Office.Interop.Excel;

此后,您可以引用Excel.Application而不是冗长的Microsoft.Office.Interop.Excel.Application

至于为什么你对Marshal.GetActiveObject的调用失败了,我不能肯定。我有几个想法:

(1)是否确定已存在Excel的运行实例?如果没有,则创建一个新的Excel应用程序:

代码语言:javascript
复制
Excel.Application xlApp = new Excel.Application();

(2)如果确实存在已经运行的Excel应用程序,并且Excel应用程序从未失去焦点,则该Excel实例可能尚未添加到运行对象表(ROT)中。有关这方面的更多信息,请参阅:Visual C# .NET Error Attaching to Running Instance of Office Application。我认为在这种情况下,Marshal.GetActiveObject方法应该抛出一个异常--而不是悄悄地返回null --但这似乎仍然是潜在的相关问题。

我希望这能帮到你。

麦克

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1340176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档