我使用的是 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/