diff --git a/src/CsvHelper.Excel.Specs/Common/Helpers.cs b/src/CsvHelper.Excel.Specs/Common/Helpers.cs
index 51ba1d4..caf9587 100644
--- a/src/CsvHelper.Excel.Specs/Common/Helpers.cs
+++ b/src/CsvHelper.Excel.Specs/Common/Helpers.cs
@@ -9,12 +9,12 @@ public static XLWorkbook GetOrCreateWorkbook(string path, string worksheetName)
{
if (!File.Exists(path))
{
- var workbook = new XLWorkbook(XLEventTracking.Disabled);
+ var workbook = new XLWorkbook();
workbook.GetOrAddWorksheet(worksheetName);
workbook.SaveAs(path);
return workbook;
}
- return new XLWorkbook(path, XLEventTracking.Disabled);
+ return new XLWorkbook(path);
}
public static IXLWorksheet GetOrAddWorksheet(this XLWorkbook workbook, string sheetName)
diff --git a/src/CsvHelper.Excel.Specs/Common/Person.cs b/src/CsvHelper.Excel.Specs/Common/Person.cs
index 0a24662..2473e3f 100644
--- a/src/CsvHelper.Excel.Specs/Common/Person.cs
+++ b/src/CsvHelper.Excel.Specs/Common/Person.cs
@@ -3,8 +3,8 @@ namespace CsvHelper.Excel.Specs.Common
{
public class Person
{
- public string Name { get; set; }
+ public string? Name { get; set; }
- public int Age { get; set; }
+ public int? Age { get; set; }
}
}
\ No newline at end of file
diff --git a/src/CsvHelper.Excel.Specs/CsvHelper.Excel.Specs.csproj b/src/CsvHelper.Excel.Specs/CsvHelper.Excel.Specs.csproj
index 1cf116d..5e6caa8 100644
--- a/src/CsvHelper.Excel.Specs/CsvHelper.Excel.Specs.csproj
+++ b/src/CsvHelper.Excel.Specs/CsvHelper.Excel.Specs.csproj
@@ -4,14 +4,13 @@
latest
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/src/CsvHelper.Excel.Specs/Parser/ExcelParserAsyncSpec.cs b/src/CsvHelper.Excel.Specs/Parser/ExcelParserAsyncSpec.cs
index 7e2066d..c607351 100644
--- a/src/CsvHelper.Excel.Specs/Parser/ExcelParserAsyncSpec.cs
+++ b/src/CsvHelper.Excel.Specs/Parser/ExcelParserAsyncSpec.cs
@@ -1,4 +1,5 @@
using System;
+using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
@@ -83,16 +84,18 @@ protected async Task RunAsync()
{
var csvConfiguration = new CsvConfiguration(CultureInfo.InvariantCulture)
{
- ShouldSkipRecord = record => record.Record.All(string.IsNullOrEmpty)
+ ShouldSkipRecord = x => x.Row.Parser.Record?.All(field => string.IsNullOrWhiteSpace(field)) ?? false
};
using var parser = new ExcelParser(Path, WorksheetName, csvConfiguration);
using var reader = new CsvReader(parser);
reader.Context.AutoMap();
+
var records = reader.GetRecordsAsync();
+
Results = await records.ToArrayAsync();
}
-
+
[Fact]
public async void TheResultsAreNotNull()
{
@@ -112,7 +115,7 @@ public async void RowsHaveData()
{
var csvConfiguration = new CsvConfiguration(CultureInfo.InvariantCulture)
{
- ShouldSkipRecord = record => record.Record.All(string.IsNullOrEmpty)
+ ShouldSkipRecord = x => x.Row.Parser.Record?.All(field => string.IsNullOrWhiteSpace(field)) ?? false
};
using var parser = new ExcelParser(Path, WorksheetName, csvConfiguration );
using var reader = new CsvReader(parser);
diff --git a/src/CsvHelper.Excel.Specs/Parser/ExcelParserSpec.cs b/src/CsvHelper.Excel.Specs/Parser/ExcelParserSpec.cs
index 7ea6793..f0a67f0 100644
--- a/src/CsvHelper.Excel.Specs/Parser/ExcelParserSpec.cs
+++ b/src/CsvHelper.Excel.Specs/Parser/ExcelParserSpec.cs
@@ -81,7 +81,7 @@ protected void Run(ExcelParser parser)
using var reader = new CsvReader(parser);
reader.Context.AutoMap();
- var records = reader.GetRecords();
+ var records = reader.GetRecords().ToList();
Results = records.ToArray();
}
diff --git a/src/CsvHelper.Excel.Specs/Parser/ParseUsingPathSpecWithBlankRow.cs b/src/CsvHelper.Excel.Specs/Parser/ParseUsingPathSpecWithBlankRow.cs
index 1a288e7..1964778 100644
--- a/src/CsvHelper.Excel.Specs/Parser/ParseUsingPathSpecWithBlankRow.cs
+++ b/src/CsvHelper.Excel.Specs/Parser/ParseUsingPathSpecWithBlankRow.cs
@@ -10,7 +10,7 @@ public ParseUsingPathSpecWithBlankRow() : base("parse_by_path_with_blank_row", i
{
var csvConfiguration = new CsvConfiguration(CultureInfo.InvariantCulture)
{
- ShouldSkipRecord = record => record.Record.All(string.IsNullOrEmpty)
+ ShouldSkipRecord = x => x.Row.Parser.Record?.All(field => string.IsNullOrWhiteSpace(field)) ?? false
};
using var parser = new ExcelParser(Path, null, csvConfiguration);
Run(parser);
diff --git a/src/CsvHelper.Excel.sln.DotSettings.user b/src/CsvHelper.Excel.sln.DotSettings.user
deleted file mode 100644
index 597be02..0000000
--- a/src/CsvHelper.Excel.sln.DotSettings.user
+++ /dev/null
@@ -1,4 +0,0 @@
-
- <SessionState ContinuousTestingMode="0" IsActive="True" Name="All tests from <CsvHelper.Excel.Specs>" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session">
- <Project Location="/Users/chris.young/projects/CsvHelper.Excel/src/CsvHelper.Excel.Specs" Presentation="<CsvHelper.Excel.Specs>" />
-</SessionState>
\ No newline at end of file
diff --git a/src/CsvHelper.Excel/CsvHelper.Excel.csproj b/src/CsvHelper.Excel/CsvHelper.Excel.csproj
index e809ce9..3920b00 100644
--- a/src/CsvHelper.Excel/CsvHelper.Excel.csproj
+++ b/src/CsvHelper.Excel/CsvHelper.Excel.csproj
@@ -2,7 +2,7 @@
An implementation of ICsvParser and ICsvSerializer from CsvHelper that reads and writes using the ClosedXml library.
CsvHelper for Excel
- 27.2.1
+ 31.0.3
Chris Young
netstandard2.0;netstandard2.1
portable
@@ -15,8 +15,7 @@
./nupkg
-
-
-
+
+
\ No newline at end of file
diff --git a/src/CsvHelper.Excel/ExcelParser.cs b/src/CsvHelper.Excel/ExcelParser.cs
index 4a95186..df3a3bf 100644
--- a/src/CsvHelper.Excel/ExcelParser.cs
+++ b/src/CsvHelper.Excel/ExcelParser.cs
@@ -83,7 +83,7 @@ public ExcelParser(Stream stream, CultureInfo culture, bool leaveOpen = false) :
/// The culture.
/// true to leave the open after the object is disposed, otherwise false.
public ExcelParser(Stream stream, string sheetName, CultureInfo culture, bool leaveOpen = false) : this(stream,
- sheetName, new CsvConfiguration(culture) {LeaveOpen= leaveOpen})
+ sheetName, new CsvConfiguration(culture), leaveOpen)
{
}
@@ -104,9 +104,9 @@ public ExcelParser(string path, string sheetName, CsvConfiguration configuration
/// The stream.
/// The sheet name
/// The configuration.
- public ExcelParser(Stream stream, string sheetName, CsvConfiguration configuration)
+ public ExcelParser(Stream stream, string sheetName, CsvConfiguration configuration, bool leaveOpen = false)
{
- var workbook = new XLWorkbook(stream, XLEventTracking.Disabled);
+ var workbook = new XLWorkbook(stream);
_worksheet = string.IsNullOrEmpty(sheetName) ? workbook.Worksheet(1) : workbook.Worksheet(sheetName);
@@ -123,7 +123,7 @@ public ExcelParser(Stream stream, string sheetName, CsvConfiguration configurati
}
Context = new CsvContext(this);
- _leaveOpen = Configuration.LeaveOpen;
+ _leaveOpen = leaveOpen;
}
diff --git a/src/CsvHelper.Excel/ExcelWriter.cs b/src/CsvHelper.Excel/ExcelWriter.cs
index a5b8c6a..c1d353c 100644
--- a/src/CsvHelper.Excel/ExcelWriter.cs
+++ b/src/CsvHelper.Excel/ExcelWriter.cs
@@ -86,7 +86,7 @@ public ExcelWriter(Stream stream, CultureInfo culture, bool leaveOpen = false) :
/// The culture.
/// true to leave the open after the object is disposed, otherwise false.
public ExcelWriter(Stream stream, string sheetName, CultureInfo culture, bool leaveOpen = false) : this(stream,
- sheetName, new CsvConfiguration(culture) { LeaveOpen = leaveOpen })
+ sheetName, new CsvConfiguration(culture), leaveOpen)
{
}
@@ -97,15 +97,15 @@ public ExcelWriter(Stream stream, string sheetName, CultureInfo culture, bool le
/// The stream.
/// The sheet name
/// The configuration.
- private ExcelWriter(Stream stream, string sheetName, CsvConfiguration configuration) : base(TextWriter.Null,
- configuration)
+ private ExcelWriter(Stream stream, string sheetName, CsvConfiguration configuration, bool leaveOpen = false) : base(TextWriter.Null,
+ configuration, leaveOpen)
{
configuration.Validate();
- _worksheet = new XLWorkbook(XLEventTracking.Disabled).AddWorksheet(sheetName);
+ _worksheet = new XLWorkbook().AddWorksheet(sheetName);
this._stream = stream;
- _leaveOpen = configuration.LeaveOpen;
- _sanitizeForInjection = configuration.SanitizeForInjection;
+ _leaveOpen = leaveOpen;
+ _sanitizeForInjection = configuration.InjectionOptions == InjectionOptions.Escape;
}