Explorar o código

If path provided lets dispose

Piotr Czajkowski hai 2 semanas
pai
achega
63800be9ee
Modificáronse 2 ficheiros con 14 adicións e 4 borrados
  1. 7 2
      ExcelORM/ExcelORM/ExcelDynamicReader.cs
  2. 7 2
      ExcelORM/ExcelORM/ExcelReader.cs

+ 7 - 2
ExcelORM/ExcelORM/ExcelDynamicReader.cs

@@ -108,8 +108,13 @@ public sealed class ExcelDynamicReader : IDisposable
     
     public static IEnumerable<List<DynamicCell>> ReadData(string? path, string? worksheetName = null, uint startFrom = 1, uint skip = 0)
     {
-        var workbook = new XLWorkbook(path);
-        return ReadData(workbook, worksheetName, startFrom, skip);
+        using var reader = new ExcelDynamicReader(path);
+        var worksheet = string.IsNullOrWhiteSpace(worksheetName) ? reader.xlWorkbook.Worksheets.FirstOrDefault()
+            : reader.xlWorkbook.Worksheets.FirstOrDefault(x => x.Name.Equals(worksheetName, StringComparison.InvariantCultureIgnoreCase));
+        if (worksheet == null) yield break;
+
+        foreach (var row in reader.Read(worksheet, startFrom, skip))
+            yield return row;
     }
     
     public static IEnumerable<List<DynamicCell>> ReadData(IXLWorkbook? workbook, string? worksheetName, uint startFrom = 1, uint skip = 0)

+ 7 - 2
ExcelORM/ExcelORM/ExcelReader.cs

@@ -117,8 +117,13 @@ public sealed class ExcelReader : IDisposable
     
     public static IEnumerable<T> ReadData<T>(string? path, string? worksheetName = null, uint startFrom = 1, uint skip = 0) where T : class
     {
-        var workbook = new XLWorkbook(path);
-        return ReadData<T>(workbook, worksheetName, startFrom, skip);
+        using var reader = new ExcelReader(path);
+        var worksheet = string.IsNullOrWhiteSpace(worksheetName) ? reader.xlWorkbook.Worksheets.FirstOrDefault()
+            : reader.xlWorkbook.Worksheets.FirstOrDefault(x => x.Name.Equals(worksheetName, StringComparison.InvariantCultureIgnoreCase));
+        if (worksheet == null) yield break;
+        
+        foreach (var row in reader.Read<T>(worksheet, startFrom, skip))
+            yield return row;
     }
     
     public static IEnumerable<T> ReadData<T>(IXLWorkbook? workbook, string? worksheetName, uint startFrom = 1, uint skip = 0) where T : class