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

How to list all open Excel workbooks

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

我查看了几个 SO 帖子并将这段代码放在一起应该列出我计算机上所有打开的 Excel 工作簿但是当我 运行 代码 none 个打开的 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();
        }
    }
}

输出应该是

starting

there should be a list of open Excel workbooks here

ending

但这是输出结果

starting

ending

如果有人能指出我需要 added/subtracted 的正确方向或更改我的代码以便它列出我计算机上所有打开的 Excel 工作簿,我将不胜感激.提前致谢。

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

要列出当前 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 可用实例的情况