C# EPPlus OfficeOpenXml检查工作表存在,但未将整个文件加载到内存中
我正在使用Visual Studio 2013 C#,EPPLus.dll。我有一个功能来检查Excel是否包含提供的工作表。下面是我使用的代码,我注意到在本例中,EPPlus在检查工作表之前将Excel文件的所有内容加载到内存中 我们能做些什么来减少这种情况?我正在阅读大量包含许多工作表的大型Excel文件,我只需要获取具有指定工作表名称的文件C# EPPlus OfficeOpenXml检查工作表存在,但未将整个文件加载到内存中,c#,excel,epplus,C#,Excel,Epplus,我正在使用Visual Studio 2013 C#,EPPLus.dll。我有一个功能来检查Excel是否包含提供的工作表。下面是我使用的代码,我注意到在本例中,EPPlus在检查工作表之前将Excel文件的所有内容加载到内存中 我们能做些什么来减少这种情况?我正在阅读大量包含许多工作表的大型Excel文件,我只需要获取具有指定工作表名称的文件 internal static bool SheetExist(string fullFilePath, string sheetName)
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();
}
}
}
我用下面的方法检查工作表是否存在。我正在使用EPPlus库
ExcelPackage objExcelPackage = new ExcelPackage();
if (objExcelPackage.Workbook?.Worksheets?.Count > 0)
{
// Generate Excel file object
// send email with attachment
}
只有将文件加载到excel包中,才能从excel包中获取图纸列表。看看ExcelPackage类的构造函数。您可以直接加载文件,也可以以流的形式加载文件。速度更快,但您还是要打开整个文件。