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 &lt;CsvHelper.Excel.Specs&gt;" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"> - <Project Location="/Users/chris.young/projects/CsvHelper.Excel/src/CsvHelper.Excel.Specs" Presentation="&lt;CsvHelper.Excel.Specs&gt;" /> -</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; }