c# - EPPlus OfficeOpenXml 检查工作表是否存在,而不将整个文件加载到内存中

标签 c# excel epplus

我使用的是 Visual Studio 2013 C#,EPPLus.dll。我有一个函数可以检查 Excel 是否包含提供的工作表。下面是我使用的代码,我注意到在这种情况下 EPPlus 在检查工作表之前将 Excel 文件的所有内容加载到内存中。

我们可以采取其他方法来减少这种情况吗?我正在阅读大量包含许多工作表的大型 Excel 文件,并且我需要仅获取具有指定工作表名称的文件。

    internal static bool SheetExist(string fullFilePath, string sheetName)
    {
        using (var package = new ExcelPackage(new FileInfo(fullFilePath)))
        {
            return package.Workbook.Worksheets.Any(sheet => sheet.Name == sheetName);
        }
    }

最佳答案

我找到了使用 OleDbConnection 的替代方案,使用它您可以只获取工作表信息而无需加载所有数据。

    internal static bool SheetExist(string fullFilePath, string sheetName)
    {
        var connString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 8.0;HDR=NO'",fullFilePath)
        var excelSheetName = "'" + sheetName + "$'";
        using (OleDbConnection excelCon = new OleDbConnection(connString))
        {
            excelCon.Open();
            try
            {
                var dtSheets = excelCon.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                if (dtSheets == null) return false;
                var sheetList = dtSheets.Select().ToList();
                return sheetList.Any(sheet => sheet["TABLE_NAME"].ToString() == excelSheetName);
            }
            finally
            {
                excelCon.Close();
            }
        }
    }

关于c# - EPPlus OfficeOpenXml 检查工作表是否存在,而不将整个文件加载到内存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47765105/

相关文章:

javascript - 从 Javascript 访问在服务器端创建的 Cookie

c# - EPPlus 超链接到另一个工作表中的单元格

c# - 使用 EPPlus,我正在尝试将 gridview 导出到 Excel 工作表

c# - ASP.NET MVC5 在 ListView 中获取所有注册的 AspNetUsers

c# - .Net Core 1.1 中的传递引用

c# - 带有 bool 对象的odp net oracle参数构造函数

python-3.x - Openpyxl 在保存时会损坏 xlsx。即使没有进行任何更改

php - 如何拆分包含多个工作表的 Excel 文件?

excel - 更改部分 excel 公式以包含来自另一个单元格的数据

c# - 在未安装 Excel [EPPlus] 的情况下打开、计算、关闭 MS Excel 电子表格