From 66c59f14bfb86d148305a882067adb3336c23cfe Mon Sep 17 00:00:00 2001 From: joost meulenkamp Date: Thu, 8 Jun 2023 15:44:55 +0200 Subject: [PATCH 01/10] wip: update csvhelper + ClosedXml --- src/CsvHelper.Excel.Specs/Common/Person.cs | 4 ++-- src/CsvHelper.Excel.Specs/CsvHelper.Excel.Specs.csproj | 5 ++--- .../Parser/ExcelParserAsyncSpec.cs | 4 ++-- src/CsvHelper.Excel.Specs/Parser/ExcelParserSpec.cs | 2 +- .../Parser/ParseUsingPathSpecWithBlankRow.cs | 3 ++- src/CsvHelper.Excel.sln.DotSettings.user | 4 ---- src/CsvHelper.Excel/CsvHelper.Excel.csproj | 5 ++--- src/CsvHelper.Excel/ExcelParser.cs | 6 +++--- src/CsvHelper.Excel/ExcelWriter.cs | 10 +++++----- 9 files changed, 19 insertions(+), 24 deletions(-) delete mode 100644 src/CsvHelper.Excel.sln.DotSettings.user 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..012660b 100644 --- a/src/CsvHelper.Excel.Specs/CsvHelper.Excel.Specs.csproj +++ b/src/CsvHelper.Excel.Specs/CsvHelper.Excel.Specs.csproj @@ -4,9 +4,8 @@ latest - - - + + diff --git a/src/CsvHelper.Excel.Specs/Parser/ExcelParserAsyncSpec.cs b/src/CsvHelper.Excel.Specs/Parser/ExcelParserAsyncSpec.cs index 7e2066d..93581f7 100644 --- a/src/CsvHelper.Excel.Specs/Parser/ExcelParserAsyncSpec.cs +++ b/src/CsvHelper.Excel.Specs/Parser/ExcelParserAsyncSpec.cs @@ -83,7 +83,7 @@ protected async Task RunAsync() { var csvConfiguration = new CsvConfiguration(CultureInfo.InvariantCulture) { - ShouldSkipRecord = record => record.Record.All(string.IsNullOrEmpty) + ShouldSkipRecord = record => Enumerable.Range(0, record.Row.ColumnCount).All(index => string.IsNullOrEmpty(record.Row[index])) }; using var parser = new ExcelParser(Path, WorksheetName, csvConfiguration); using var reader = new CsvReader(parser); @@ -112,7 +112,7 @@ public async void RowsHaveData() { var csvConfiguration = new CsvConfiguration(CultureInfo.InvariantCulture) { - ShouldSkipRecord = record => record.Record.All(string.IsNullOrEmpty) + ShouldSkipRecord = record => Enumerable.Range(0, record.Row.ColumnCount).All(index => string.IsNullOrEmpty(record.Row[index])) }; 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..a0f9390 100644 --- a/src/CsvHelper.Excel.Specs/Parser/ParseUsingPathSpecWithBlankRow.cs +++ b/src/CsvHelper.Excel.Specs/Parser/ParseUsingPathSpecWithBlankRow.cs @@ -10,7 +10,8 @@ public ParseUsingPathSpecWithBlankRow() : base("parse_by_path_with_blank_row", i { var csvConfiguration = new CsvConfiguration(CultureInfo.InvariantCulture) { - ShouldSkipRecord = record => record.Record.All(string.IsNullOrEmpty) + IgnoreBlankLines = true, + }; 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..c92ef03 100644 --- a/src/CsvHelper.Excel/CsvHelper.Excel.csproj +++ b/src/CsvHelper.Excel/CsvHelper.Excel.csproj @@ -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..4d8f595 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,7 +104,7 @@ 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); @@ -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..cdf0158 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); this._stream = stream; - _leaveOpen = configuration.LeaveOpen; - _sanitizeForInjection = configuration.SanitizeForInjection; + _leaveOpen = leaveOpen; + _sanitizeForInjection = configuration.InjectionOptions == InjectionOptions.Escape; } From c81ee8a9f6a8e48da9f570d5ccb091b4d9189994 Mon Sep 17 00:00:00 2001 From: joost meulenkamp Date: Thu, 22 Jun 2023 15:07:37 +0200 Subject: [PATCH 02/10] fix: remove no longer compatible XLEventTracking enums from XLWorkbook constructors --- src/CsvHelper.Excel.Specs/Common/Helpers.cs | 4 ++-- src/CsvHelper.Excel/ExcelParser.cs | 2 +- src/CsvHelper.Excel/ExcelWriter.cs | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) 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/ExcelParser.cs b/src/CsvHelper.Excel/ExcelParser.cs index 4d8f595..df3a3bf 100644 --- a/src/CsvHelper.Excel/ExcelParser.cs +++ b/src/CsvHelper.Excel/ExcelParser.cs @@ -106,7 +106,7 @@ public ExcelParser(string path, string sheetName, CsvConfiguration configuration /// The 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); diff --git a/src/CsvHelper.Excel/ExcelWriter.cs b/src/CsvHelper.Excel/ExcelWriter.cs index cdf0158..c1d353c 100644 --- a/src/CsvHelper.Excel/ExcelWriter.cs +++ b/src/CsvHelper.Excel/ExcelWriter.cs @@ -101,7 +101,7 @@ private ExcelWriter(Stream stream, string sheetName, CsvConfiguration configurat configuration, leaveOpen) { configuration.Validate(); - _worksheet = new XLWorkbook(XLEventTracking.Disabled).AddWorksheet(sheetName); + _worksheet = new XLWorkbook().AddWorksheet(sheetName); this._stream = stream; _leaveOpen = leaveOpen; From c8159456f76d2a91c7d552cf6b1bc13afdde78e4 Mon Sep 17 00:00:00 2001 From: joost meulenkamp Date: Thu, 22 Jun 2023 15:23:13 +0200 Subject: [PATCH 03/10] fix: fixed CsvConfigurations --- .../Parser/ExcelParserAsyncSpec.cs | 22 ++++++++++++++++--- .../Parser/ParseUsingPathSpecWithBlankRow.cs | 3 +-- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/CsvHelper.Excel.Specs/Parser/ExcelParserAsyncSpec.cs b/src/CsvHelper.Excel.Specs/Parser/ExcelParserAsyncSpec.cs index 93581f7..8109a55 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,31 @@ protected async Task RunAsync() { var csvConfiguration = new CsvConfiguration(CultureInfo.InvariantCulture) { - ShouldSkipRecord = record => Enumerable.Range(0, record.Row.ColumnCount).All(index => string.IsNullOrEmpty(record.Row[index])) + 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(); } - + + private bool ShouldSkipRecord(ShouldSkipRecordArgs args) + { + + + for (int i = 0; i < args.Row.ColumnCount; i++) + { + if (!string.IsNullOrEmpty(args.Row[i])) + return false; + } + + return true; + } + [Fact] public async void TheResultsAreNotNull() { @@ -112,7 +128,7 @@ public async void RowsHaveData() { var csvConfiguration = new CsvConfiguration(CultureInfo.InvariantCulture) { - ShouldSkipRecord = record => Enumerable.Range(0, record.Row.ColumnCount).All(index => string.IsNullOrEmpty(record.Row[index])) + 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/ParseUsingPathSpecWithBlankRow.cs b/src/CsvHelper.Excel.Specs/Parser/ParseUsingPathSpecWithBlankRow.cs index a0f9390..1964778 100644 --- a/src/CsvHelper.Excel.Specs/Parser/ParseUsingPathSpecWithBlankRow.cs +++ b/src/CsvHelper.Excel.Specs/Parser/ParseUsingPathSpecWithBlankRow.cs @@ -10,8 +10,7 @@ public ParseUsingPathSpecWithBlankRow() : base("parse_by_path_with_blank_row", i { var csvConfiguration = new CsvConfiguration(CultureInfo.InvariantCulture) { - IgnoreBlankLines = true, - + ShouldSkipRecord = x => x.Row.Parser.Record?.All(field => string.IsNullOrWhiteSpace(field)) ?? false }; using var parser = new ExcelParser(Path, null, csvConfiguration); Run(parser); From f0e419fdc49fc61b554cc3f547d27d530ef00e57 Mon Sep 17 00:00:00 2001 From: joost meulenkamp Date: Thu, 22 Jun 2023 15:41:27 +0200 Subject: [PATCH 04/10] update package information --- src/CsvHelper.Excel/CsvHelper.Excel.csproj | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/CsvHelper.Excel/CsvHelper.Excel.csproj b/src/CsvHelper.Excel/CsvHelper.Excel.csproj index c92ef03..12febfa 100644 --- a/src/CsvHelper.Excel/CsvHelper.Excel.csproj +++ b/src/CsvHelper.Excel/CsvHelper.Excel.csproj @@ -1,18 +1,19 @@ - An implementation of ICsvParser and ICsvSerializer from CsvHelper that reads and writes using the ClosedXml library. + An implementation of ICsvParser and ICsvSerializer from CsvHelper that reads and writes using the ClosedXml library. Forked from youngcm2/CsvHelper.Excel - Updated to ClosedXML > 0.101.0 and CsvHelper > 30.0.1 CsvHelper for Excel - 27.2.1 - Chris Young + 30.0.1 + Joost Meulenkamp, Chris Young netstandard2.0;netstandard2.1 portable CsvHelper.Excel Library CsvHelper.Excel.Core CSV;CSVHelper;Excel;ClosedXML - https://github.com/youngcm2/CsvHelper.Excel - https://github.com/youngcm2/CsvHelper.Excel/blob/master/LICENSE + https://github.com/hurles/CsvHelper.Excel + https://github.com/hurles/CsvHelper.Excel/blob/main/LICENSE ./nupkg + 30.0.1 From 4120829730c44e3ad4b74b78ed7a934efecc34eb Mon Sep 17 00:00:00 2001 From: joost meulenkamp Date: Thu, 22 Jun 2023 15:43:16 +0200 Subject: [PATCH 05/10] update package info --- src/CsvHelper.Excel/CsvHelper.Excel.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/CsvHelper.Excel/CsvHelper.Excel.csproj b/src/CsvHelper.Excel/CsvHelper.Excel.csproj index 12febfa..c2eb408 100644 --- a/src/CsvHelper.Excel/CsvHelper.Excel.csproj +++ b/src/CsvHelper.Excel/CsvHelper.Excel.csproj @@ -1,9 +1,9 @@ - An implementation of ICsvParser and ICsvSerializer from CsvHelper that reads and writes using the ClosedXml library. Forked from youngcm2/CsvHelper.Excel - Updated to ClosedXML > 0.101.0 and CsvHelper > 30.0.1 + An implementation of ICsvParser and ICsvSerializer from CsvHelper that reads and writes using the ClosedXml library. Forked from CsvHelper.Excel by Chris Young. Updated to ClosedXML > 0.101.0 and CsvHelper > 30.0.1 CsvHelper for Excel 30.0.1 - Joost Meulenkamp, Chris Young + Joost Meulenkamp netstandard2.0;netstandard2.1 portable CsvHelper.Excel From e4b07fad82199d53313583253248deef16ce9941 Mon Sep 17 00:00:00 2001 From: joost meulenkamp Date: Thu, 22 Jun 2023 15:50:22 +0200 Subject: [PATCH 06/10] remove changes to csProj --- src/CsvHelper.Excel/CsvHelper.Excel.csproj | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/CsvHelper.Excel/CsvHelper.Excel.csproj b/src/CsvHelper.Excel/CsvHelper.Excel.csproj index c2eb408..c92ef03 100644 --- a/src/CsvHelper.Excel/CsvHelper.Excel.csproj +++ b/src/CsvHelper.Excel/CsvHelper.Excel.csproj @@ -1,19 +1,18 @@ - An implementation of ICsvParser and ICsvSerializer from CsvHelper that reads and writes using the ClosedXml library. Forked from CsvHelper.Excel by Chris Young. Updated to ClosedXML > 0.101.0 and CsvHelper > 30.0.1 + An implementation of ICsvParser and ICsvSerializer from CsvHelper that reads and writes using the ClosedXml library. CsvHelper for Excel - 30.0.1 - Joost Meulenkamp + 27.2.1 + Chris Young netstandard2.0;netstandard2.1 portable CsvHelper.Excel Library CsvHelper.Excel.Core CSV;CSVHelper;Excel;ClosedXML - https://github.com/hurles/CsvHelper.Excel - https://github.com/hurles/CsvHelper.Excel/blob/main/LICENSE + https://github.com/youngcm2/CsvHelper.Excel + https://github.com/youngcm2/CsvHelper.Excel/blob/master/LICENSE ./nupkg - 30.0.1 From f96802706c76b0e93d2b44e91ef33907fadc7510 Mon Sep 17 00:00:00 2001 From: joost meulenkamp Date: Thu, 22 Jun 2023 15:53:13 +0200 Subject: [PATCH 07/10] chore: removed unused method --- .../Parser/ExcelParserAsyncSpec.cs | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/src/CsvHelper.Excel.Specs/Parser/ExcelParserAsyncSpec.cs b/src/CsvHelper.Excel.Specs/Parser/ExcelParserAsyncSpec.cs index 8109a55..c607351 100644 --- a/src/CsvHelper.Excel.Specs/Parser/ExcelParserAsyncSpec.cs +++ b/src/CsvHelper.Excel.Specs/Parser/ExcelParserAsyncSpec.cs @@ -96,19 +96,6 @@ protected async Task RunAsync() Results = await records.ToArrayAsync(); } - private bool ShouldSkipRecord(ShouldSkipRecordArgs args) - { - - - for (int i = 0; i < args.Row.ColumnCount; i++) - { - if (!string.IsNullOrEmpty(args.Row[i])) - return false; - } - - return true; - } - [Fact] public async void TheResultsAreNotNull() { From f23e7adc33fb4bbd69ca1db970f2fc819dcdac4c Mon Sep 17 00:00:00 2001 From: joost meulenkamp Date: Thu, 22 Jun 2023 16:04:56 +0200 Subject: [PATCH 08/10] chore: updated package info --- src/CsvHelper.Excel/CsvHelper.Excel.csproj | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/CsvHelper.Excel/CsvHelper.Excel.csproj b/src/CsvHelper.Excel/CsvHelper.Excel.csproj index c92ef03..8d0902d 100644 --- a/src/CsvHelper.Excel/CsvHelper.Excel.csproj +++ b/src/CsvHelper.Excel/CsvHelper.Excel.csproj @@ -1,9 +1,9 @@ - An implementation of ICsvParser and ICsvSerializer from CsvHelper that reads and writes using the ClosedXml library. + An implementation of ICsvParser and ICsvSerializer from CsvHelper that reads and writes using the ClosedXml library. Updated for CsvHelper >= 30.0.1 and ClosedXML >= 0.101.0. Forked from CsvHelper.Excel by Chris Young CsvHelper for Excel - 27.2.1 - Chris Young + 30.0.1 + Joost Meulenkamp netstandard2.0;netstandard2.1 portable CsvHelper.Excel From c82ee58ab9436f653c5b7b1d0438ac11a3bf9b83 Mon Sep 17 00:00:00 2001 From: Joost Meulenkamp Date: Tue, 16 Apr 2024 15:13:22 +0200 Subject: [PATCH 09/10] upgrade ClosedXML from 0.101.0 to 0.102.2 upgrade CsvHelper from 30.0.1 to 31.0.3 upgrade testing libraries --- .../CsvHelper.Excel.Specs.csproj | 14 +++++++------- src/CsvHelper.Excel/CsvHelper.Excel.csproj | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/CsvHelper.Excel.Specs/CsvHelper.Excel.Specs.csproj b/src/CsvHelper.Excel.Specs/CsvHelper.Excel.Specs.csproj index 012660b..5e6caa8 100644 --- a/src/CsvHelper.Excel.Specs/CsvHelper.Excel.Specs.csproj +++ b/src/CsvHelper.Excel.Specs/CsvHelper.Excel.Specs.csproj @@ -4,13 +4,13 @@ latest - - - - - - - + + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/CsvHelper.Excel/CsvHelper.Excel.csproj b/src/CsvHelper.Excel/CsvHelper.Excel.csproj index 8d0902d..d619f21 100644 --- a/src/CsvHelper.Excel/CsvHelper.Excel.csproj +++ b/src/CsvHelper.Excel/CsvHelper.Excel.csproj @@ -15,7 +15,7 @@ ./nupkg - - + + \ No newline at end of file From 3a9c6e3ed6094e930412a9a30a96ed2b5b022e68 Mon Sep 17 00:00:00 2001 From: Joost Meulenkamp Date: Tue, 16 Apr 2024 15:28:42 +0200 Subject: [PATCH 10/10] fix wrongly committed auto-generated csproj --- src/CsvHelper.Excel/CsvHelper.Excel.csproj | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/CsvHelper.Excel/CsvHelper.Excel.csproj b/src/CsvHelper.Excel/CsvHelper.Excel.csproj index d619f21..3920b00 100644 --- a/src/CsvHelper.Excel/CsvHelper.Excel.csproj +++ b/src/CsvHelper.Excel/CsvHelper.Excel.csproj @@ -1,9 +1,9 @@ - An implementation of ICsvParser and ICsvSerializer from CsvHelper that reads and writes using the ClosedXml library. Updated for CsvHelper >= 30.0.1 and ClosedXML >= 0.101.0. Forked from CsvHelper.Excel by Chris Young + An implementation of ICsvParser and ICsvSerializer from CsvHelper that reads and writes using the ClosedXml library. CsvHelper for Excel - 30.0.1 - Joost Meulenkamp + 31.0.3 + Chris Young netstandard2.0;netstandard2.1 portable CsvHelper.Excel