EPPlus OfficeOpenXml检查工作表存在而不将整个文件加载到内存中

时间:2017-12-12 03:54:05

标签: 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);
        }
    }

2 个答案:

答案 0 :(得分:1)

我已经找到了使用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();
            }
        }
    }

答案 1 :(得分:0)

我通过以下方式检查工作表的存在。我正在使用EPPlus库。

var data = [{"cmd":"GetImage","code":0,"value":{"Image":{"bright":128,"channel":0,"contrast":128,"hue":128,"saturation":128,"sharpen":128}}}]

console.log(data[0].value.Image.bright)