无法在 C# 中循环打开 Excel 个工作簿

unable to loop through open Excel workbooks in C#

我目前一直无法完成一项非常简单的任务:

当然,我按照惯例谷歌搜索代码片段,发现了很多现成的代码,根据威胁和评级讨论中的评论,它们应该可以工作.但对我来说,它们都不起作用

我也看到有人提到释放 COM 对象,但我并没有真正理解它,所有现成的代码示例也不包含它。

我正在使用:

我修改了网上找到的代码片段,所以我现在的代码是这样的:

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

private void PrintListOfOpenWB()
{
    Microsoft.Office.Interop.Excel.Application xlApp;
            
    xlApp = new Microsoft.Office.Interop.Excel.Application();

    foreach (Workbook item in xlApp.Workbooks)
    {
        Console.WriteLine(item.Name);
    }
}

我将其用作 WindowsFormsApp 的一部分,因此也 使用 System.Windows.Forms 等,但是我删除了这部分,所以这里只显示相关代码。

我确实打开了多个工作簿,并且在编译和 运行 代码时都没有出现任何错误。但是绝对没有输出产生,因为它直接跳到foreach循环的末尾。

知道我做错了什么吗?

这可能 returns 没有输出,因为变量是空的,做你所做的你只创建了让你访问库方法的变量,你不能用实际的 excel 文件,要这样做:

Workbook workBook = xlApp.Workbooks.Open(yourExcelFilePath);

//Cycle through the workBook and display the sheets

workBook.Close(false, yourExcelFilePath, null);

请记住,使用 excel 文件的层次结构(这实际上与帮助您执行此操作的所有不同库相同)的结构如下:

  • 测试=新Microsoft.Office.Interop.Excel.Application(); : 这仅用于与库方法交互
  • 工作簿:这是您要处理的完整 excel 文件的实际等价物,您需要先填充它
  • 工作表:这是一个实体,表示文件中的单个 excel“页面”

P.S:Re-reading这个问题我可能理解错了,你能指定是显示文件夹内的excel个文件名还是显示excel个文件名单个 excel 文件中的单页

要在某处显示不同 excel 文件的名称,您可以这样做:

string[] temp = Directory.GetFiles(directoryPath);
List<string> ExcelFilesInDirectory = new();

foreach (var item in temp)
{
    if (item.Contains(".xlsx"))
    {
        ExcelFilesInDirectory.Add(item);
    }
}

然后使用该列表,您可以让用户 select 他想要修改的文件,然后您可以使用我发送的第一个代码示例来使其工作

我进一步研究并找到了以下适合我的解决方案。

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

private void PrintListOfOpenWorkbooks()
{
    Excel.Application xlApp;
 
    xlApp = (Excel.Application)Marshal.GetActiveObject("Excel.Application");

    foreach(Excel.Workbook xlWorkBook in xlApp.Workbooks)
    {
        Console.WriteLine(xlWorkBook.Name);
    }
}

也许这对以后的其他人也有帮助。