8 Komitmen 1b2441fbca ... 8a94a5fba1

Pembuat SHA1 Pesan Tanggal
  Piotr Czajkowski 8a94a5fba1 Added info on 3.1.0 1 Minggu lalu
  Piotr Czajkowski 7a890a8ebb Better 2 minggu lalu
  Piotr Czajkowski 56878bb159 Let's be consistent 2 minggu lalu
  Piotr Czajkowski 63800be9ee If path provided lets dispose 2 minggu lalu
  Piotr Czajkowski 6d421839d6 Need one more here as well 2 minggu lalu
  Piotr Czajkowski aee93fc03e Needed one more 2 minggu lalu
  Piotr Czajkowski d868c70aea Added ReadData 2 minggu lalu
  Piotr Czajkowski 863ab7bfb4 Added ReadData 2 minggu lalu

+ 30 - 0
ExcelORM/ExcelORM/ExcelDynamicReader.cs

@@ -105,6 +105,36 @@ public sealed class ExcelDynamicReader : IDisposable
             Cells = Read(worksheet, startFrom, skip)
         });
     }
+    
+    public static IEnumerable<List<DynamicCell>> ReadData(string? path, string? worksheetName = null, uint startFrom = 1, uint skip = 0)
+    {
+        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)
+    {
+        ArgumentNullException.ThrowIfNull(workbook);
+        
+        var worksheet = string.IsNullOrWhiteSpace(worksheetName) ? workbook.Worksheets.FirstOrDefault()
+            : workbook.Worksheets.FirstOrDefault(x => x.Name.Equals(worksheetName, StringComparison.InvariantCultureIgnoreCase));
+        
+        return worksheet == null ? [] : ReadData(workbook, worksheet.Position, startFrom, skip);
+    }
+    
+    public static IEnumerable<List<DynamicCell>> ReadData(IXLWorkbook? workbook, int worksheetIndex = 1, uint startFrom = 1, uint skip = 0)
+    {
+        ArgumentNullException.ThrowIfNull(workbook);
+        if (worksheetIndex < 1 || worksheetIndex > workbook.Worksheets.Count) return [];
+        
+        var reader = new ExcelDynamicReader(workbook);
+        return reader.Read(worksheetIndex, startFrom, skip);
+    }
 
     public void Dispose()
     {

+ 2 - 2
ExcelORM/ExcelORM/ExcelORM.csproj

@@ -4,7 +4,7 @@
         <TargetFramework>net8.0</TargetFramework>
         <ImplicitUsings>enable</ImplicitUsings>
         <Nullable>enable</Nullable>
-        <Version>3.0.2</Version>
+        <Version>3.1.0</Version>
         <PackageProjectUrl>https://git.liox.eu/pczajkowski/ExcelORM</PackageProjectUrl>
         <RepositoryUrl>https://github.com/pczajkowski/ExcelORM</RepositoryUrl>
         <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
@@ -14,7 +14,7 @@
 	<Authors>Piotr Czajkowski</Authors>
 	<Description>Simple library to read/write C# objects from/to Excel files. </Description>
 	<RepositoryType>GitHub</RepositoryType>
-	<PackageReleaseNotes>Few small improvements.</PackageReleaseNotes>
+	<PackageReleaseNotes>Added static ReadData methods for quick access.</PackageReleaseNotes>
     </PropertyGroup>
 
     <ItemGroup>

+ 30 - 0
ExcelORM/ExcelORM/ExcelReader.cs

@@ -114,6 +114,36 @@ public sealed class ExcelReader : IDisposable
     {
         return xlWorkbook.Worksheets.SelectMany(worksheet => Read<T>(worksheet, startFrom, skip));
     }
+    
+    public static IEnumerable<T> ReadData<T>(string? path, string? worksheetName = null, uint startFrom = 1, uint skip = 0) where T : class
+    {
+        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
+    {
+        ArgumentNullException.ThrowIfNull(workbook);
+        
+        var worksheet = string.IsNullOrWhiteSpace(worksheetName) ? workbook.Worksheets.FirstOrDefault()
+            : workbook.Worksheets.FirstOrDefault(x => x.Name.Equals(worksheetName, StringComparison.InvariantCultureIgnoreCase));
+        
+        return worksheet == null ? [] : ReadData<T>(workbook, worksheet.Position, startFrom, skip);
+    }
+    
+    public static IEnumerable<T> ReadData<T>(IXLWorkbook? workbook, int worksheetIndex = 1, uint startFrom = 1, uint skip = 0) where T : class
+    {
+        ArgumentNullException.ThrowIfNull(workbook);
+        if (worksheetIndex < 1 || worksheetIndex > workbook.Worksheets.Count) return [];
+        
+        var reader = new ExcelReader(workbook);
+        return reader.Read<T>(worksheetIndex, startFrom, skip);
+    }
 
     public void Dispose()
     {

+ 12 - 0
ExcelORM/ExcelORMTests/DynamicReaderTests.cs

@@ -58,4 +58,16 @@ public class DynamicReaderTests
         var results = reader.Read().ToArray();
         Assert.Empty(results);
     } 
+    
+    [Fact]
+    public void ReadData()
+    {
+        var results = ExcelDynamicReader.ReadData(RegularFile).ToArray();
+        Assert.NotEmpty(results);
+        
+        using var workbook = new XLWorkbook(RegularFile);
+        var resultsWorkbook = ExcelDynamicReader.ReadData(workbook).ToArray();
+        Assert.NotEmpty(resultsWorkbook);
+        Assert.Equal(results, resultsWorkbook);
+    }
 }

+ 12 - 0
ExcelORM/ExcelORMTests/ReaderTests.cs

@@ -136,4 +136,16 @@ public class ReaderTests
         var results = reader.Read<Test>().ToArray();
         Assert.Empty(results);
     }
+    
+    [Fact]
+    public void ReadData()
+    {
+        var results = ExcelReader.ReadData<Test>(RegularFile).ToArray();
+        Assert.NotEmpty(results);
+        
+        using var workbook = new XLWorkbook(RegularFile);
+        var resultsWorkbook = ExcelReader.ReadData<Test>(workbook).ToArray();
+        Assert.NotEmpty(resultsWorkbook);
+        Assert.Equal(results, resultsWorkbook);
+    }
 }

+ 2 - 1
ExcelORM/ExcelORMTests/Usings.cs

@@ -1 +1,2 @@
-global using Xunit;
+global using Xunit;
+global using ClosedXML.Excel;

+ 1 - 0
versions.md

@@ -10,3 +10,4 @@
 | 2.7.0 | Added support for reading properties of type Guid and enum.|
 | 2.8.0 | Handling more number types. Properly handling appending to and reading from empty file.|
 | 3.0.0 | Ability to start writing from given row. Trying to handle dates saved as text without throwing.|
+| 3.1.0 | Added static ReadData methods for quick access.