Pārlūkot izejas kodu

Fixed append when empty file

Piotr Czajkowski 3 dienas atpakaļ
vecāks
revīzija
d5ef95c8e3

+ 5 - 2
ExcelORM/ExcelORM/ExcelDynamicWriter.cs

@@ -28,9 +28,12 @@ public class ExcelDynamicWriter : IDisposable
 
     private static void Write(IEnumerable<List<DynamicCell>> values, IXLWorksheet worksheet, bool append)
     {
+        var lastRow = worksheet.LastRowUsed();
+        if (lastRow == null) append = false;
+        
         var rowIndex = append switch
         {
-            true => worksheet.LastRowUsed()?.RowNumber() + 1,
+            true => lastRow.RowNumber() + 1,
             false => GenerateHeader(worksheet, values.First()),
         };
 
@@ -42,7 +45,7 @@ public class ExcelDynamicWriter : IDisposable
             {
                 if (cell.Value == null) continue;
 
-                worksheet.Cell(rowIndex.Value, cell.Position).Value = XLCellValue.FromObject(cell.Value);
+                worksheet.Cell(rowIndex, cell.Position).Value = XLCellValue.FromObject(cell.Value);
             }
 
             rowIndex++;

+ 29 - 3
ExcelORM/ExcelORMTests/DynamicWriterTests.cs

@@ -45,9 +45,9 @@ public class DynamicWriterTests
         writer.Write(results);
         writer.SaveAs(testFile);
         
-        using var writerAppend = new ExcelDynamicWriter();
-        writer.Write(results, append: true);
-        writer.SaveAs(testFile);
+        using var writerAppend = new ExcelDynamicWriter(testFile);
+        writerAppend.Write(results, append: true);
+        writerAppend.SaveAs(testFile);
 
         using var savedReader = new ExcelDynamicReader(testFile);
         var savedResults = savedReader.Read().ToArray();
@@ -58,6 +58,32 @@ public class DynamicWriterTests
 
         File.Delete(testFile);
     }
+    
+    private const string EmptyFileForAppend = "testFiles/emptyForAppend.xlsx";
+    
+    [Fact]
+    public void WriteWithAppendEmptyFile()
+    {
+        var testFile = Path.GetRandomFileName();
+        testFile = Path.ChangeExtension(testFile, "xlsx");
+        File.Copy(EmptyFileForAppend, testFile);
+
+        using var reader = new ExcelDynamicReader(DifficultFile);
+        var results = reader.Read().ToArray();
+        Assert.NotEmpty(results);
+
+        using var writerAppend = new ExcelDynamicWriter(testFile);
+        writerAppend.Write(results, append: true);
+        writerAppend.SaveAs(testFile);
+
+        using var savedReader = new ExcelDynamicReader(testFile);
+        var savedResults = savedReader.Read().ToArray();
+        Assert.NotEmpty(savedResults);
+        Assert.True(results.First().SequenceEqual(savedResults.First()));
+        Assert.True(results.Last().SequenceEqual(savedResults.Last()));
+
+        File.Delete(testFile);
+    }
 
     [Fact]
     public void WriteAll()