1
0

6 Коммитууд 509116a88e ... 1b2441fbca

Эзэн SHA1 Мессеж Огноо
  Piotr Czajkowski 1b2441fbca Better? 1 сар өмнө
  Piotr Czajkowski 5e572f95a9 Better lambdas 1 сар өмнө
  Piotr Czajkowski a5121bed88 More checks 2 сар өмнө
  Piotr Czajkowski 16928bb02a Cleanup 2 сар өмнө
  Piotr Czajkowski 772fa48c0d Don't throw on empty 2 сар өмнө
  Piotr Czajkowski e3138544a6 Let's be safe 2 сар өмнө

+ 5 - 15
ExcelORM/ExcelORM/ExcelDynamicReader.cs

@@ -31,7 +31,7 @@ public sealed class ExcelDynamicReader : IDisposable
                 var cell = row.Cell(item.Position);
                 if (cell == null || cell.Value.IsBlank)
                 {
-                    dynamicRow.Add(item);
+                    dynamicRow.Add(item with { Value = null });
                     continue;
                 }
 
@@ -53,7 +53,7 @@ public sealed class ExcelDynamicReader : IDisposable
 
         var firstRow = worksheet.Row((int)startFrom);
         if (firstRow.IsEmpty())
-            firstRow = worksheet.RowsUsed().FirstOrDefault(x => x.RowNumber() > startFrom && !x.IsEmpty());
+            firstRow = worksheet.RowsUsed(x => x.RowNumber() > startFrom && !x.IsEmpty()).FirstOrDefault();
         
         if (firstRow == null || firstRow.IsEmpty()) yield break;
 
@@ -65,7 +65,7 @@ public sealed class ExcelDynamicReader : IDisposable
             true => worksheet.AutoFilter.VisibleRows
                 .Where(x => x.RowNumber() > firstRow.RowNumber())
                 .Select(x => x.WorksheetRow()),
-            false => worksheet.RowsUsed().Where(x => x.RowNumber() > firstRow.RowNumber())
+            false => worksheet.RowsUsed(x => x.RowNumber() > firstRow.RowNumber())
 
         };
 
@@ -87,7 +87,7 @@ public sealed class ExcelDynamicReader : IDisposable
 
     public IEnumerable<List<DynamicCell>> Read(int worksheetIndex = 1, uint startFrom = 1, uint skip = 0)
     {
-        if (worksheetIndex > xlWorkbook.Worksheets.Count) yield break;
+        if (worksheetIndex < 1 || worksheetIndex > xlWorkbook.Worksheets.Count) yield break;
 
         var worksheet = xlWorkbook.Worksheets.FirstOrDefault(x => x.Position == worksheetIndex);
         if (worksheet == null) yield break;
@@ -108,16 +108,6 @@ public sealed class ExcelDynamicReader : IDisposable
 
     public void Dispose()
     {
-        Dispose(true);
-        GC.SuppressFinalize(this);
+        xlWorkbook.Dispose();
     }
-
-    private void Dispose(bool disposing)
-    {
-        if (disposing)
-        {
-            xlWorkbook.Dispose();
-        }
-    }
-    ~ExcelDynamicReader() => Dispose(false);
 }

+ 5 - 13
ExcelORM/ExcelORM/ExcelDynamicWriter.cs

@@ -4,7 +4,7 @@ using ExcelORM.Models;
 
 namespace ExcelORM;
 
-public class ExcelDynamicWriter : IDisposable
+public sealed class ExcelDynamicWriter : IDisposable
 {
     private readonly IXLWorkbook xlWorkbook;
     public ExcelDynamicWriter(string? path = null)
@@ -28,6 +28,9 @@ public class ExcelDynamicWriter : IDisposable
 
     private static void Write(IEnumerable<List<DynamicCell>> values, IXLWorksheet worksheet, bool append)
     {
+        var valuesList = values.ToList();
+        if (valuesList.Count == 0) return;
+        
         var lastRow = worksheet.LastRowUsed();
         if (lastRow == null)
         {
@@ -35,7 +38,6 @@ public class ExcelDynamicWriter : IDisposable
             lastRow = worksheet.FirstRow();
         }
 
-        var valuesList = values.ToList();
         var rowIndex = append switch
         {
             true => lastRow.RowNumber() + 1,
@@ -84,16 +86,6 @@ public class ExcelDynamicWriter : IDisposable
 
     public void Dispose()
     {
-        Dispose(true);
-        GC.SuppressFinalize(this);
-    }
-
-    protected virtual void Dispose(bool disposing)
-    {
-        if (disposing)
-        {
-            xlWorkbook.Dispose();
-        }
+        xlWorkbook.Dispose();
     }
-    ~ExcelDynamicWriter() => Dispose(false);
 }

+ 2 - 2
ExcelORM/ExcelORM/ExcelORM.csproj

@@ -4,7 +4,7 @@
         <TargetFramework>net8.0</TargetFramework>
         <ImplicitUsings>enable</ImplicitUsings>
         <Nullable>enable</Nullable>
-        <Version>3.0.1</Version>
+        <Version>3.0.2</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 cosmetic changes and updated to ClosedXML 0.105.1.</PackageReleaseNotes>
+	<PackageReleaseNotes>Few small improvements.</PackageReleaseNotes>
     </PropertyGroup>
 
     <ItemGroup>

+ 5 - 15
ExcelORM/ExcelORM/ExcelReader.cs

@@ -4,7 +4,7 @@ using ExcelORM.Models;
 
 namespace ExcelORM;
 
-public class ExcelReader : IDisposable
+public sealed class ExcelReader : IDisposable
 {
     private readonly IXLWorkbook xlWorkbook;
     public bool SkipHidden { get; set; }
@@ -67,7 +67,7 @@ public class ExcelReader : IDisposable
 
         var firstRow = worksheet.Row((int)startFrom);
         if (firstRow.IsEmpty())
-            firstRow = worksheet.RowsUsed().FirstOrDefault(x => x.RowNumber() > startFrom && !x.IsEmpty());
+            firstRow = worksheet.RowsUsed(x => x.RowNumber() > startFrom && !x.IsEmpty()).FirstOrDefault();
         
         if (firstRow == null || firstRow.IsEmpty()) yield break;
 
@@ -79,7 +79,7 @@ public class ExcelReader : IDisposable
             true => worksheet.AutoFilter.VisibleRows
                 .Where(x => x.RowNumber() > firstRow.RowNumber())
                 .Select(x => x.WorksheetRow()),
-            false => worksheet.RowsUsed().Where(x => x.RowNumber() > firstRow.RowNumber())
+            false => worksheet.RowsUsed(x => x.RowNumber() > firstRow.RowNumber())
 
         };
 
@@ -101,7 +101,7 @@ public class ExcelReader : IDisposable
 
     public IEnumerable<T> Read<T>(int worksheetIndex = 1, uint startFrom = 1, uint skip = 0) where T : class
     {
-        if (worksheetIndex > xlWorkbook.Worksheets.Count) yield break;
+        if (worksheetIndex < 1 || worksheetIndex > xlWorkbook.Worksheets.Count) yield break;
 
         var worksheet = xlWorkbook.Worksheets.FirstOrDefault(x => x.Position == worksheetIndex);
         if (worksheet == null) yield break;
@@ -117,16 +117,6 @@ public class ExcelReader : IDisposable
 
     public void Dispose()
     {
-        Dispose(true);
-        GC.SuppressFinalize(this);
+        xlWorkbook.Dispose();
     }
-
-    protected virtual void Dispose(bool disposing)
-    {
-        if (disposing)
-        {
-            xlWorkbook.Dispose();
-        }
-    }
-    ~ExcelReader() => Dispose(false);
 }

+ 2 - 12
ExcelORM/ExcelORM/ExcelWriter.cs

@@ -6,7 +6,7 @@ using ExcelORM.Models;
 
 namespace ExcelORM;
 
-public class ExcelWriter : IDisposable
+public sealed class ExcelWriter : IDisposable
 {
     private readonly IXLWorkbook xlWorkbook;
     public ExcelWriter(string? path = null)
@@ -131,16 +131,6 @@ public class ExcelWriter : IDisposable
 
     public void Dispose()
     {
-        Dispose(true);
-        GC.SuppressFinalize(this);
+        xlWorkbook.Dispose();
     }
-
-    protected virtual void Dispose(bool disposing)
-    {
-        if (disposing)
-        {
-            xlWorkbook.Dispose();
-        }
-    }
-    ~ExcelWriter() => Dispose(false);
 }