我正在用.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工作簿。谢谢。
答案 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实例的情况