|
@@ -1,4 +1,5 @@
|
|
using ClosedXML.Excel;
|
|
using ClosedXML.Excel;
|
|
|
|
+using ExcelORM.Models;
|
|
|
|
|
|
namespace ExcelORM;
|
|
namespace ExcelORM;
|
|
|
|
|
|
@@ -38,20 +39,6 @@ public class ExcelReader
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- public IEnumerable<T> Read<T>(uint startFrom = 1, uint skip = 0) where T : class, new()
|
|
|
|
- {
|
|
|
|
- return xlWorkbook.Worksheets.SelectMany(worksheet => Read<T>(worksheet, startFrom, skip));
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public IEnumerable<T> Read<T>(string? worksheetName, uint startFrom = 1, uint skip = 0) where T : class, new()
|
|
|
|
- {
|
|
|
|
- var worksheet = xlWorkbook.Worksheets.FirstOrDefault(x => x.Name.Equals(worksheetName, StringComparison.InvariantCultureIgnoreCase));
|
|
|
|
- if (worksheet == null) yield break;
|
|
|
|
-
|
|
|
|
- foreach (var value in Read<T>(worksheet, startFrom, skip))
|
|
|
|
- yield return value;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
private IEnumerable<T> Read<T>(IXLWorksheet? worksheet, uint startFrom, uint skip) where T : class, new()
|
|
private IEnumerable<T> Read<T>(IXLWorksheet? worksheet, uint startFrom, uint skip) where T : class, new()
|
|
{
|
|
{
|
|
if (worksheet == null) yield break;
|
|
if (worksheet == null) yield break;
|
|
@@ -59,7 +46,7 @@ public class ExcelReader
|
|
var firstRow = worksheet.Row((int)startFrom);
|
|
var firstRow = worksheet.Row((int)startFrom);
|
|
if (firstRow.IsEmpty())
|
|
if (firstRow.IsEmpty())
|
|
firstRow = worksheet.RowsUsed().First(x => x.RowNumber() > startFrom && !x.IsEmpty());
|
|
firstRow = worksheet.RowsUsed().First(x => x.RowNumber() > startFrom && !x.IsEmpty());
|
|
-
|
|
|
|
|
|
+
|
|
var mapping = Mapping.MapProperties<T>(firstRow.CellsUsed());
|
|
var mapping = Mapping.MapProperties<T>(firstRow.CellsUsed());
|
|
if (mapping == null) yield break;
|
|
if (mapping == null) yield break;
|
|
|
|
|
|
@@ -69,13 +56,42 @@ public class ExcelReader
|
|
.Where(x => x.RowNumber() > firstRow.RowNumber())
|
|
.Where(x => x.RowNumber() > firstRow.RowNumber())
|
|
.Select(x => x.WorksheetRow()),
|
|
.Select(x => x.WorksheetRow()),
|
|
false => worksheet.RowsUsed().Where(x => x.RowNumber() > firstRow.RowNumber())
|
|
false => worksheet.RowsUsed().Where(x => x.RowNumber() > firstRow.RowNumber())
|
|
-
|
|
|
|
|
|
+
|
|
};
|
|
};
|
|
|
|
|
|
rowsToProcess = rowsToProcess
|
|
rowsToProcess = rowsToProcess
|
|
.Skip((int)skip);
|
|
.Skip((int)skip);
|
|
-
|
|
|
|
|
|
+
|
|
foreach (var item in ProcessRows<T>(rowsToProcess, mapping))
|
|
foreach (var item in ProcessRows<T>(rowsToProcess, mapping))
|
|
yield return item;
|
|
yield return item;
|
|
- }
|
|
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public IEnumerable<T> Read<T>(string? worksheetName, uint startFrom = 1, uint skip = 0) where T : class, new()
|
|
|
|
+ {
|
|
|
|
+ var worksheet = xlWorkbook.Worksheets.FirstOrDefault(x => x.Name.Equals(worksheetName, StringComparison.InvariantCultureIgnoreCase));
|
|
|
|
+ if (worksheet == null) yield break;
|
|
|
|
+
|
|
|
|
+ foreach (var value in Read<T>(worksheet, startFrom, skip))
|
|
|
|
+ yield return value;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public IEnumerable<T> Read<T>(int worksheetIndex = 1, uint startFrom = 1, uint skip = 0) where T : class, new()
|
|
|
|
+ {
|
|
|
|
+ if (worksheetIndex > xlWorkbook.Worksheets.Count) yield break;
|
|
|
|
+
|
|
|
|
+ var worksheet = xlWorkbook.Worksheets.FirstOrDefault(x => x.Position == worksheetIndex);
|
|
|
|
+ if (worksheet == null) yield break;
|
|
|
|
+
|
|
|
|
+ foreach (var value in Read<T>(worksheet, startFrom, skip))
|
|
|
|
+ yield return value;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public IEnumerable<T> ReadAll<T>(uint startFrom = 1, uint skip = 0) where T : class, new()
|
|
|
|
+ {
|
|
|
|
+ foreach (var worksheet in xlWorkbook.Worksheets)
|
|
|
|
+ {
|
|
|
|
+ foreach (var item in Read<T>(worksheet, startFrom, skip))
|
|
|
|
+ yield return item;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|