如何列出所有打开的Excel工作簿

时间:2018-12-27 01:26:43

标签: c# excel-interop

我正在用.net 4.7.1编写一个c#控制台应用程序。我的计算机上有几个打开的Excel工作簿。我试图列出计算机上所有打开的Excel工作簿。

我看了几篇SO文章并将这些代码放在一起,这些代码应该列出计算机上所有打开的Excel工作簿,但是当我运行代码时 没有打开的Excel工作簿都没有列出。

using System;
using System.Runtime.InteropServices;
using Microsoft.Office.Interop.Excel;

namespace ExcelWorkbooks
{
    class Program
    {
        static void Main(string[] args)
        {
            Application oXL = new Microsoft.Office.Interop.Excel.Application();
            oXL = (Application)Marshal.GetActiveObject("Excel.Application");
            Console.WriteLine("starting");
            foreach (Microsoft.Office.Interop.Excel.Workbook blah in oXL.Workbooks)
            {
                Console.WriteLine(blah.Name.ToString());
            }
            Console.WriteLine("ending");
            Console.ReadLine();
        }
    }
}

输出应为

  

开始

     

这里应该有一个打开的Excel工作簿列表

     

结束

但是这是输出

  

开始

     

结束

如果有人可以向我指出我的代码中需要添加/减去或更改的内容的正确方向,以便它将列出我计算机上所有打开的Excel工作簿,我将不胜感激。预先感谢。

编辑:我正在玩这个游戏,我关闭了两个打开的Excel工作簿。然后,我查看了任务管理器,发现即使关闭了所有Excel工作簿,仍然有10个“ EXCEL”进程仍在运行。我关闭了所有“ EXCEL”过程,然后再次打开了2个Excel工作簿。现在,上面的代码列出了2个打开的Excel工作簿。因此,我想这个问题已经有些改变,为什么当我只有两个打开的工作簿时为什么有10个“ EXCEL”进程正在运行,更重要的是,我应该如何处理这个问题,因此,如果还有其他“ EXCEL”进程我可以处理因此它将显示打开的Excel工作簿。谢谢。

1 个答案:

答案 0 :(得分:0)

要列出当前Excel实例工作簿名称,只需更改:

Application oXL = new Microsoft.Office.Interop.Excel.Application();
oXL = (Application)Marshal.GetActiveObject("Excel.Application");

收件人:

 Application oXL = (Application)Marshal.GetActiveObject("Excel.Application");

您可能想添加一些Try / Catch块来处理没有可用Excel实例的情况