Forráskód Böngészése

Append now works with empty file

Piotr Czajkowski 3 napja
szülő
commit
8cb334bbfd

+ 6 - 5
ExcelORM/ExcelORM/ExcelWriter.cs

@@ -82,10 +82,13 @@ public class ExcelWriter : IDisposable
         var properties = typeof(T).GetProperties();
         List<Mapping>? mapping = [];
 
+        var lastRow = worksheet.LastRowUsed();
+        if (lastRow == null && append) append = false;
+        
         var rowIndex = (append, startFrom: appendFrom) switch
         { 
             (true, not null) => (int)appendFrom,
-            (true, null) => worksheet.LastRowUsed()?.RowNumber() + 1,
+            (true, null) => lastRow.RowNumber() + 1,
             _ => GenerateHeader(worksheet, properties) 
         };
 
@@ -96,12 +99,10 @@ public class ExcelWriter : IDisposable
             if (mapping == null || mapping.Count == 0) return;
         }
 
-        if (rowIndex == null) throw new NullReferenceException(nameof(rowIndex));
-
         foreach (var value in values)
         {
-            if (append) WriteRowAppend(value, worksheet, properties, rowIndex.Value, mapping);
-            else WriteRow(value, worksheet, properties, rowIndex.Value);
+            if (append) WriteRowAppend(value, worksheet, properties, rowIndex, mapping);
+            else WriteRow(value, worksheet, properties, rowIndex);
             
             rowIndex++;
         }

+ 3 - 0
ExcelORM/ExcelORMTests/ExcelORMTests.csproj

@@ -62,6 +62,9 @@
       <None Update="testFiles\additionalTypes.xlsx">
         <CopyToOutputDirectory>Always</CopyToOutputDirectory>
       </None>
+      <None Update="testFiles\emptyForAppend.xlsx">
+        <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+      </None>
     </ItemGroup>
 
     <ItemGroup>

+ 22 - 0
ExcelORM/ExcelORMTests/WriterTests.cs

@@ -136,6 +136,28 @@ public class WriterTests
 
         File.Delete(testFile);
     }
+    
+    private const string EmptyFileForAppend = "testFiles/emptyForAppend.xlsx";
+    [Fact]
+    public void WriteWithAppendEmpty()
+    {
+        var testFile = Path.GetRandomFileName();
+        testFile = Path.ChangeExtension(testFile, "xlsx");
+        File.Copy(EmptyFileForAppend, testFile);
+
+        using var writer = new ExcelWriter(testFile);
+        writer.Write(ArrayOfThree, append: true);
+        writer.SaveAs(testFile);
+
+        using var reader = new ExcelReader(testFile);
+        var readArray = reader.Read<Test>().ToArray();
+        Assert.Equal(3, readArray.Length);
+
+        for (int i = 0; i < ArrayOfThree.Length; i++)
+            Assert.Equal(ArrayOfThree[i], readArray[i]);
+        
+        File.Delete(testFile);
+    }
 
     [Fact]
     public void WriteDifferentTypes()

BIN
ExcelORM/ExcelORMTests/testFiles/emptyForAppend.xlsx