我正在使用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);
}
}
答案 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)