diff --git a/V2-Upgrade-Notes.md b/V2-Upgrade-Notes.md index 6b0f9ed7..7135c8a1 100644 --- a/V2-Upgrade-Notes.md +++ b/V2-Upgrade-Notes.md @@ -11,4 +11,5 @@ - If the full MiniExcel package is downloaded, the previous namespace will coexist along the new one, containing the original static methods' signatures, which have become a facade for the aferomentioned providers. - `IConfiguration` is now `IMiniExcelConfiguration`, but most methods now require the proper implementation (`OpenXmlConfiguration` or `CsvConfiguration`) to be provided rather than the interface - MiniExcel now fully supports asynchronous streaming the queries, -so the return type for `OpenXmlImporter.QueryAsync` is `IAsyncEnumerable` instead of `Task>` \ No newline at end of file +so the return type for `OpenXmlImporter.QueryAsync` is `IAsyncEnumerable` instead of `Task>` +- When applying a template, unlike version 1.x, the flag for overwriting an already existing file must be provided explicitly. \ No newline at end of file diff --git a/src/MiniExcel.OpenXml/Api/OpenXmlTemplater.cs b/src/MiniExcel.OpenXml/Api/OpenXmlTemplater.cs index 61120299..29ec070e 100644 --- a/src/MiniExcel.OpenXml/Api/OpenXmlTemplater.cs +++ b/src/MiniExcel.OpenXml/Api/OpenXmlTemplater.cs @@ -24,18 +24,18 @@ public async Task AddPictureAsync(Stream excelStream, CancellationToken cancella } [CreateSyncVersion] - public async Task ApplyTemplateAsync(string path, string templatePath, object value, + public async Task ApplyTemplateAsync(string path, string templatePath, object value, bool overwriteFile = false, OpenXmlConfiguration? configuration = null, CancellationToken cancellationToken = default) { - using var stream = File.Create(path); + using var stream = overwriteFile ? File.Create(path) : File.Open(path, FileMode.CreateNew); await ApplyTemplateAsync(stream, templatePath, value, configuration, cancellationToken).ConfigureAwait(false); } [CreateSyncVersion] - public async Task ApplyTemplateAsync(string path, Stream templateStream, object value, + public async Task ApplyTemplateAsync(string path, Stream templateStream, object value, bool overwriteFile = false, OpenXmlConfiguration? configuration = null, CancellationToken cancellationToken = default) { - using var stream = File.Create(path); + using var stream = overwriteFile ? File.Create(path) : File.Open(path, FileMode.CreateNew); var template = GetOpenXmlTemplate(stream, configuration); await template.SaveAsByTemplateAsync(templateStream, value, cancellationToken).ConfigureAwait(false); } @@ -57,10 +57,10 @@ public async Task ApplyTemplateAsync(Stream stream, Stream templateStream, objec } [CreateSyncVersion] - public async Task ApplyTemplateAsync(string path, byte[] templateBytes, object value, + public async Task ApplyTemplateAsync(string path, byte[] templateBytes, object value, bool overwriteFile = false, OpenXmlConfiguration? configuration = null, CancellationToken cancellationToken = default) { - using var stream = File.Create(path); + using var stream = overwriteFile ? File.Create(path) : File.Open(path, FileMode.CreateNew); await ApplyTemplateAsync(stream, templateBytes, value, configuration, cancellationToken).ConfigureAwait(false); } diff --git a/src/MiniExcel/MiniExcel.cs b/src/MiniExcel/MiniExcel.cs index a641ad1b..8dc5d57d 100644 --- a/src/MiniExcel/MiniExcel.cs +++ b/src/MiniExcel/MiniExcel.cs @@ -221,11 +221,11 @@ public static IAsyncEnumerable QueryRangeAsync(this Stream stream, bool [CreateSyncVersion] public static async Task SaveAsByTemplateAsync(string path, string templatePath, object value, IConfiguration? configuration = null, CancellationToken cancellationToken = default) - => await ExcelTemplater.ApplyTemplateAsync(path, templatePath, value, configuration as OpenXmlConfiguration, cancellationToken).ConfigureAwait(false); + => await ExcelTemplater.ApplyTemplateAsync(path, templatePath, value, true, configuration as OpenXmlConfiguration, cancellationToken).ConfigureAwait(false); [CreateSyncVersion] public static async Task SaveAsByTemplateAsync(string path, byte[] templateBytes, object value, IConfiguration? configuration = null) - => await ExcelTemplater.ApplyTemplateAsync(path, templateBytes, value, configuration as OpenXmlConfiguration).ConfigureAwait(false); + => await ExcelTemplater.ApplyTemplateAsync(path, templateBytes, value, true, configuration as OpenXmlConfiguration).ConfigureAwait(false); [CreateSyncVersion] public static async Task SaveAsByTemplateAsync(this Stream stream, string templatePath, object value, IConfiguration? configuration = null) @@ -237,7 +237,7 @@ public static async Task SaveAsByTemplateAsync(this Stream stream, byte[] templa [CreateSyncVersion] public static async Task SaveAsByTemplateAsync(string path, Stream templateStream, object value, IConfiguration? configuration = null) - => await ExcelTemplater.ApplyTemplateAsync(path, templateStream, value, configuration as OpenXmlConfiguration).ConfigureAwait(false); + => await ExcelTemplater.ApplyTemplateAsync(path, templateStream, value, true, configuration as OpenXmlConfiguration).ConfigureAwait(false); [CreateSyncVersion] public static async Task SaveAsByTemplateAsync(this Stream stream, Stream templateStream, object value, IConfiguration? configuration = null) diff --git a/tests/MiniExcel.OpenXml.Tests/MiniExcelIssueTests.cs b/tests/MiniExcel.OpenXml.Tests/MiniExcelIssueTests.cs index f0983649..949aad16 100644 --- a/tests/MiniExcel.OpenXml.Tests/MiniExcelIssueTests.cs +++ b/tests/MiniExcel.OpenXml.Tests/MiniExcelIssueTests.cs @@ -4,7 +4,6 @@ using MiniExcelLib.Core.Exceptions; using MiniExcelLib.OpenXml.Picture; using MiniExcelLib.OpenXml.Tests.Utils; -using MiniExcelLib.OpenXml.Utils; using MiniExcelLib.Tests.Common.Utils; using NPOI.XSSF.UserModel; @@ -34,8 +33,8 @@ public void TestIssue549() using var file = AutoDeletingPath.Create(); var path = file.ToString(); - _excelExporter.Export(path, data); - var rows = _excelImporter.Query(path, true).ToList(); + _excelExporter.Export(path, data); + var rows = _excelImporter.Query(path, true).ToList(); { using var stream = new FileStream(path, FileMode.Open, FileAccess.Read); using var workbook = new XSSFWorkbook(stream); @@ -63,7 +62,7 @@ public void TestIssue24020201() new() { { "specialMark", 3 } }, } }; - _excelTemplater.ApplyTemplate(path.ToString(), templatePath, data); + _excelTemplater.ApplyTemplate(path.ToString(), templatePath, data); } [Fact] @@ -80,9 +79,9 @@ public void TestIssue553() new{ ITM=3 } } }; - _excelTemplater.ApplyTemplate(path.ToString(), templatePath, data); + _excelTemplater.ApplyTemplate(path.ToString(), templatePath, data); - var rows = _excelImporter.Query(path.ToString()).ToList(); + var rows = _excelImporter.Query(path.ToString()).ToList(); Assert.Equal(rows[2].A, 1); Assert.Equal(rows[3].A, 2); Assert.Equal(rows[4].A, 3); @@ -98,9 +97,9 @@ public void TestIssue289() new() { Name="0002", UserType=DescriptionEnum.V2 }, new() { Name="0003", UserType=DescriptionEnum.V3 } ]; - _excelExporter.Export(path.ToString(), value); + _excelExporter.Export(path.ToString(), value); - var rows = _excelImporter.Query(path.ToString()).ToList(); + var rows = _excelImporter.Query(path.ToString()).ToList(); Assert.Equal(DescriptionEnum.V1, rows[0].UserType); Assert.Equal(DescriptionEnum.V2, rows[1].UserType); @@ -131,8 +130,8 @@ public void TestIssue430() { new TestIssue430Dto{ Date=DateTimeOffset.Parse("2021-01-31 10:03:00 +05:00")} }; - _excelExporter.Export(path.ToString(), value); - var rows = _excelImporter.Query(path.ToString()).ToArray(); + _excelExporter.Export(path.ToString(), value); + var rows = _excelImporter.Query(path.ToString()).ToArray(); Assert.Equal("2021-01-31 10:03:00 +05:00", rows[0].Date.ToString("yyyy-MM-dd HH:mm:ss zzz")); } @@ -155,7 +154,7 @@ public void TestIssue_DataReaderSupportDimension() using var path = AutoDeletingPath.Create(); using var reader = table.CreateDataReader(); var config = new OpenXmlConfiguration { FastMode = true }; - _excelExporter.Export(path.ToString(), reader, configuration: config); + _excelExporter.Export(path.ToString(), reader, configuration: config); var xml = SheetHelper.GetZipFileContent(path.ToString(), "xl/worksheets/sheet1.xml"); Assert.Contains("", xml); @@ -179,8 +178,8 @@ public void TestIssue413() } }; var templatePath = PathHelper.GetFile("xlsx/TestIssue413.xlsx"); - _excelTemplater.ApplyTemplate(path.ToString(), templatePath, value); - var rows = _excelImporter.Query(path.ToString()).ToList(); + _excelTemplater.ApplyTemplate(path.ToString(), templatePath, value); + var rows = _excelImporter.Query(path.ToString()).ToList(); Assert.Equal("2022-12-25 00:00:00", rows[1].B); Assert.Equal("2022-09-23 00:00:00", rows[2].B); @@ -195,7 +194,7 @@ public void TestIssue405() { using var path = AutoDeletingPath.Create(); var value = new[] { new { id = 1, name = "test" } }; - _excelExporter.Export(path.ToString(), value); + _excelExporter.Export(path.ToString(), value); var xml = SheetHelper.GetZipFileContent(path.ToString(), "xl/sharedStrings.xml"); Assert.StartsWith(">>(json); - _excelExporter.Export(path.ToString(), value, configuration: config); + _excelExporter.Export(path.ToString(), value, configuration: config); - var rows = _excelImporter.Query(path.ToString()).ToList(); + var rows = _excelImporter.Query(path.ToString()).ToList(); Assert.Equal("createdate", rows[0].A); Assert.Equal(new DateTime(2022, 04, 12), rows[1].A); Assert.Equal("name", rows[0].B); @@ -253,9 +252,9 @@ public void TestIssue369() }; using var path = AutoDeletingPath.Create(); var value = new[] { new { id = 1, name = "Jack", createdate = new DateTime(2022, 04, 12), point = 123.456 } }; - _excelExporter.Export(path.ToString(), value, configuration: config); + _excelExporter.Export(path.ToString(), value, configuration: config); - var rows = _excelImporter.Query(path.ToString()).ToList(); + var rows = _excelImporter.Query(path.ToString()).ToList(); Assert.Equal("createdate", rows[0].A); Assert.Equal(new DateTime(2022, 04, 12), rows[1].A); Assert.Equal("name", rows[0].B); @@ -269,9 +268,9 @@ public void TestIssueI4ZYUU() { using var path = AutoDeletingPath.Create(); TestIssueI4ZYUUDto[] value = [new() { MyProperty = "1", MyProperty2 = new DateTime(2022, 10, 15) }]; - _excelExporter.Export(path.ToString(), value); + _excelExporter.Export(path.ToString(), value); - var rows = _excelImporter.Query(path.ToString()).ToList(); + var rows = _excelImporter.Query(path.ToString()).ToList(); Assert.Equal("2022-10", rows[1].B); using var workbook = new ClosedXML.Excel.XLWorkbook(path.ToString()); @@ -294,10 +293,10 @@ public void TestIssue360() { var path = PathHelper.GetFile("xlsx/NotDuplicateSharedStrings_10x100.xlsx"); var config = new OpenXmlConfiguration { SharedStringCacheSize = 1 }; - var sheets = _excelImporter.GetSheetNames(path); + var sheets = _excelImporter.GetSheetNames(path); foreach (var sheetName in sheets) { - var dt = _excelImporter.QueryAsDataTable(path, useHeaderRow: true, sheetName: sheetName, configuration: config); + var dt = _excelImporter.QueryAsDataTable(path, useHeaderRow: true, sheetName: sheetName, configuration: config); } } @@ -331,7 +330,7 @@ public void TestIssue352() using var path = AutoDeletingPath.Create(); var reader = table.CreateDataReader(); - _excelExporter.Export(path.ToString(), reader); + _excelExporter.Export(path.ToString(), reader); var xml = SheetHelper.GetZipFileContent(path.ToString(), "xl/worksheets/sheet1.xml"); var cnt = Regex.Matches(xml, "").Count; } @@ -344,7 +343,7 @@ public void TestIssue352() using var path = AutoDeletingPath.Create(); var reader = table.CreateDataReader(); - _excelExporter.Export(path.ToString(), reader, false); + _excelExporter.Export(path.ToString(), reader, false); var xml = SheetHelper.GetZipFileContent(path.ToString(), "xl/worksheets/sheet1.xml"); var cnt = Regex.Matches(xml, "").Count; } @@ -355,7 +354,7 @@ public void TestIssue352() using var path = AutoDeletingPath.Create(); var reader = table.CreateDataReader(); - _excelExporter.Export(path.ToString(), reader); + _excelExporter.Export(path.ToString(), reader); var xml = SheetHelper.GetZipFileContent(path.ToString(), "xl/worksheets/sheet1.xml"); var cnt = Regex.Matches(xml, "").Count; } @@ -379,7 +378,7 @@ public void TestIssue401(bool autoFilter, int count) var reader = table.CreateDataReader(); using var path = AutoDeletingPath.Create(); var config = new OpenXmlConfiguration { AutoFilter = autoFilter }; - _excelExporter.Export(path.ToString(), reader, configuration: config); + _excelExporter.Export(path.ToString(), reader, configuration: config); var xml = SheetHelper.GetZipFileContent(path.ToString(), "xl/worksheets/sheet1.xml"); var cnt = Regex.Matches(xml, "").Count; @@ -396,7 +395,7 @@ public void TestIssue401(bool autoFilter, int count) var reader = table.CreateDataReader(); using var path = AutoDeletingPath.Create(); var config = new OpenXmlConfiguration { AutoFilter = autoFilter }; - _excelExporter.Export(path.ToString(), reader, false, configuration: config); + _excelExporter.Export(path.ToString(), reader, false, configuration: config); var xml = SheetHelper.GetZipFileContent(path.ToString(), "xl/worksheets/sheet1.xml"); var cnt = Regex.Matches(xml, "").Count; @@ -411,7 +410,7 @@ public void TestIssue401(bool autoFilter, int count) var reader = table.CreateDataReader(); using var path = AutoDeletingPath.Create(); var config = new OpenXmlConfiguration { AutoFilter = autoFilter }; - _excelExporter.Export(path.ToString(), reader, configuration: config); + _excelExporter.Export(path.ToString(), reader, configuration: config); var xml = SheetHelper.GetZipFileContent(path.ToString(), "xl/worksheets/sheet1.xml"); var cnt = Regex.Matches(xml, "").Count; @@ -462,7 +461,7 @@ UNION ALL using (var transaction = connection.BeginTransaction()) using (var stream = File.OpenRead(xlsxPath)) { - var rows = _excelImporter.Query(stream); + var rows = _excelImporter.Query(stream); foreach (var row in rows) connection.Execute( "insert into T (A,B) values (@A,@B)", @@ -496,12 +495,12 @@ public async Task TestIssue307() var path = file.ToString(); var value = new[] { new { id = 1, name = "Jack" } }; - await _excelExporter.ExportAsync(path, value); - Assert.Throws(() => _excelExporter.Export(path, value)); + await _excelExporter.ExportAsync(path, value); + Assert.Throws(() => _excelExporter.Export(path, value)); - await _excelExporter.ExportAsync(path, value, overwriteFile: true); - await Assert.ThrowsAsync(async () => await _excelExporter.ExportAsync(path, value)); - await _excelExporter.ExportAsync(path, value, overwriteFile: true); + await _excelExporter.ExportAsync(path, value, overwriteFile: true); + await Assert.ThrowsAsync(async () => await _excelExporter.ExportAsync(path, value)); + await _excelExporter.ExportAsync(path, value, overwriteFile: true); } [Fact] @@ -509,8 +508,8 @@ public void TestIssue310() { using var path = AutoDeletingPath.Create(); var value = new[] { new TestIssue310Dto { V1 = null }, new TestIssue310Dto { V1 = 2 } }; - _excelExporter.Export(path.ToString(), value); - var rows = _excelImporter.Query(path.ToString()).ToList(); + _excelExporter.Export(path.ToString(), value); + var rows = _excelImporter.Query(path.ToString()).ToList(); } [Fact] @@ -522,8 +521,8 @@ public void TestIssue310Fix497() new TestIssue310Dto { V1 = null }, new TestIssue310Dto { V1 = 2 } }; - _excelExporter.Export(path.ToString(), value, configuration: new OpenXmlConfiguration { EnableWriteNullValueCell = false }); - var rows = _excelImporter.Query(path.ToString()).ToList(); + _excelExporter.Export(path.ToString(), value, configuration: new OpenXmlConfiguration { EnableWriteNullValueCell = false }); + var rows = _excelImporter.Query(path.ToString()).ToList(); } private class TestIssue310Dto @@ -549,9 +548,9 @@ public void TestIssue343() table.Rows.Add(date, date); } var reader = table.CreateDataReader(); - _excelExporter.Export(path.ToString(), reader); + _excelExporter.Export(path.ToString(), reader); - var rows = _excelImporter.Query(path.ToString(), true).ToArray(); + var rows = _excelImporter.Query(path.ToString(), true).ToArray(); Assert.Equal(date, rows[0].time1); Assert.Equal(date, rows[0].time2); } @@ -560,7 +559,7 @@ public void TestIssue343() public void TestIssueI4YCLQ_2() { var path = PathHelper.GetFile("xlsx/TestIssueI4YCLQ_2.xlsx"); - var rows = _excelImporter.Query(path, startCell: "B2").ToList(); + var rows = _excelImporter.Query(path, startCell: "B2").ToList(); Assert.Null(rows[0].站点编码); Assert.Equal("N1", rows[0].站址名称); @@ -610,8 +609,8 @@ public void TestIssueI4WM67() { ["users"] = Array.Empty() }; - _excelTemplater.ApplyTemplate(path.ToString(), templatePath, value); - var rows = _excelImporter.Query(path.ToString()).ToList(); + _excelTemplater.ApplyTemplate(path.ToString(), templatePath, value); + var rows = _excelImporter.Query(path.ToString()).ToList(); Assert.Single(rows); } @@ -633,7 +632,7 @@ public void TestIssueI4WXFB() ["Amount"] = 1000, ["Department"] = "HR" }; - _excelTemplater.ApplyTemplate(path.ToString(), templatePath, value); + _excelTemplater.ApplyTemplate(path.ToString(), templatePath, value); } { @@ -649,7 +648,7 @@ public void TestIssueI4WXFB() ["Amount"] = 1000, ["Department"] = "HR" }; - Assert.Throws(() => _excelTemplater.ApplyTemplate(path.ToString(), templatePath, value, config)); + Assert.Throws(() => _excelTemplater.ApplyTemplate(path.ToString(), templatePath, value, configuration: config)); } } @@ -674,7 +673,7 @@ public void TestIssue331_2() }); using var path = AutoDeletingPath.Create(); - _excelExporter.Export(path.ToString(), data, configuration: config); + _excelExporter.Export(path.ToString(), data, configuration: config); CultureInfo.CurrentCulture = CultureInfo.GetCultureInfo(cln); } @@ -693,9 +692,9 @@ public void TestIssue331() }); using var path = AutoDeletingPath.Create(); - _excelExporter.Export(path.ToString(), data); + _excelExporter.Export(path.ToString(), data); - var rows = _excelImporter.Query(path.ToString(), startCell: "A2").ToArray(); + var rows = _excelImporter.Query(path.ToString(), startCell: "A2").ToArray(); Assert.Equal(1.5, rows[2].B); Assert.Equal(1.5, rows[2].C); @@ -717,16 +716,16 @@ public void TestIssueI4TXGT() var path = file.ToString(); var value = new[] { new TestIssueI4TXGTDto { ID = 1, Name = "Apple", Spc = "X", Up = 6999 } }; - _excelExporter.Export(path, value); + _excelExporter.Export(path, value); { - var rows = _excelImporter.Query(path).ToList(); + var rows = _excelImporter.Query(path).ToList(); Assert.Equal("ID", rows[0].A); Assert.Equal("Name", rows[0].B); Assert.Equal("Specification", rows[0].C); Assert.Equal("Unit Price", rows[0].D); } { - var rows = _excelImporter.Query(path).ToList(); + var rows = _excelImporter.Query(path).ToList(); Assert.Equal(1, rows[0].ID); Assert.Equal("Apple", rows[0].Name); Assert.Equal("X", rows[0].Spc); @@ -765,10 +764,10 @@ public void TestIssue328() file = File.ReadAllBytes(PathHelper.GetFile("other/TestIssue327.txt")) }, }; - _excelExporter.Export(path.ToString(), value); + _excelExporter.Export(path.ToString(), value); var rowIndx = 0; - using var reader = _excelImporter.GetDataReader(path.ToString(), true); + using var reader = _excelImporter.GetDataReader(path.ToString(), true); Assert.Equal("id", reader.GetName(0)); Assert.Equal("name", reader.GetName(1)); @@ -805,8 +804,8 @@ public void TestIssue327() new { id = 2, file = File.ReadAllBytes(PathHelper.GetFile("other/TestIssue327.txt")) }, new { id = 3, file = File.ReadAllBytes(PathHelper.GetFile("other/TestIssue327.html")) }, }; - _excelExporter.Export(path.ToString(), value); - var rows = _excelImporter.Query(path.ToString(), true).ToList(); + _excelExporter.Export(path.ToString(), value); + var rows = _excelImporter.Query(path.ToString(), true).ToList(); Assert.Equal(value[0].file, rows[0].file); Assert.Equal(value[1].file, rows[1].file); @@ -827,7 +826,7 @@ public void TestIssue325() { "sheet1",new[]{ new { id = 1, date = DateTime.Parse("2022-01-01") } }}, { "sheet2",new[]{ new { id = 2, date = DateTime.Parse("2022-01-01") } }}, }; - _excelExporter.Export(path.ToString(), value); + _excelExporter.Export(path.ToString(), value); var xml = SheetHelper.GetZipFileContent(path.ToString(), "xl/worksheets/_rels/sheet2.xml.rels"); var cnt = Regex.Matches(xml, "Id=\"drawing2\"").Count; @@ -848,9 +847,9 @@ public void TestIssueI49RZH() new TestIssueI49RZHDto{ dd = DateTimeOffset.Parse("2022-01-22")}, new TestIssueI49RZHDto{ dd = null} }; - _excelExporter.Export(path.ToString(), value); + _excelExporter.Export(path.ToString(), value); - var rows = _excelImporter.Query(path.ToString()).ToList(); + var rows = _excelImporter.Query(path.ToString()).ToList(); Assert.Equal("2022-01-22", rows[1].A); } @@ -872,9 +871,9 @@ public void TestIssue312() new() { Value = 12345.6789}, new() { Value = null} ]; - _excelExporter.Export(path.ToString(), value); + _excelExporter.Export(path.ToString(), value); - var rows = _excelImporter.Query(path.ToString()).ToList(); + var rows = _excelImporter.Query(path.ToString()).ToList(); Assert.Equal("12,345.68", rows[1].A); } @@ -894,7 +893,7 @@ public void TestIssue209() try { var path = PathHelper.GetFile("xlsx/TestIssue309.xlsx"); - var rows = _excelImporter.Query(path).ToList(); + var rows = _excelImporter.Query(path).ToList(); } catch (ValueNotAssignableException ex) { @@ -925,13 +924,13 @@ public void TestIssue318() { new { Name="github", Image=imageByte}, }; - _excelExporter.Export(path.ToString(), value); + _excelExporter.Export(path.ToString(), value); // import to byte[] { const string expectedBase64 = "iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAIAAAD9b0jDAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAEXRFWHRTb2Z0d2FyZQBTbmlwYXN0ZV0Xzt0AAALNSURBVEiJ7ZVLTBNBGMdndrfdIofy0ERbCgcFeYRuCy2JGOPNRA9qeIZS6YEEogQj0YMmGOqDSATxQaLRxKtRID4SgjGelUBpaQvGZ7kpII8aWtjd2dkdDxsJoS1pIh6M/k+z8833m/3+8+0OJISArRa15cT/0D8CZTYPe32+Zy+GxjzjMzOzAACDYafdZquqOG7hzJtkwUQthRC6cavv0eN+QRTBujUQQp1OV1dbffZMq1arTRaqKIok4eZTrSNjHqIo6gIIIQBgbQwpal+Z/f7dPo2GoaiNHtJut3vjPhBe7+kdfvW61Mq1nGyaX1xYjkRzsk2Z6Rm8IOTvzWs73SLwwqjHK4jCgf3lcV6VxGgiECji7AXm0gvtHYQQnue/zy8ghCRJWlxaWuV5Qsilq9cKzLYiiz04ORVLiHP6A4NPRQlhjLWsVpZlnU63Y3umRqNhGCYjPV3HsrIsMwyDsYQQejIwGEuIA/WMT1AAaDSahnoHTdPKL1vXPKVp2umoZVkWAOj1+ZOCzs7NKYTo9XqjYRcAgKIo9ZRUu9VxltGYZTQAAL5+m0kKijEmAPCrqyJCcRuOECKI4lL4ByEEYykpaE62iQIgurLi9wchhLIsry8fYwwh9PomwuEwACDbZEoKauHMgKJSU1PbOy6Hpqdpml5fPsMwn7+EOru6IYQAghKrJSloTVUFURSX02G3lRw+WulqbA4EJ9XQh4+f2s6dr65zhkLTEEIKwtqaylhCnG/fauFO1Nfde/Bw6Hm/0WiYevc+LU2vhlK2pQwNvwQAsCwrYexyOrji4lhCnOaXZRljXONoOHTk2Ju3I/5AcC3EC0JZ+cE9Bea8IqursUkUker4BsWBqpIk6aL7Sm4htzvfvByJqJORaDS3kMsvLuns6kYIJcpNCFU17pvouXlHEET1URDEnt7bo2OezbMS/vp+R3/PdfKPQ38Ccg0E/CDcpY8AAAAASUVORK5CYII="; - var rows = _excelImporter.Query(path.ToString(), true).ToList(); + var rows = _excelImporter.Query(path.ToString(), true).ToList(); var actulBase64 = Convert.ToBase64String((byte[])rows[0].Image); Assert.Equal(expectedBase64, actulBase64); } @@ -939,7 +938,7 @@ public void TestIssue318() // import to base64 string { var config = new OpenXmlConfiguration { EnableConvertByteArray = false }; - var rows = _excelImporter.Query(path.ToString(), true, configuration: config).ToList(); + var rows = _excelImporter.Query(path.ToString(), true, configuration: config).ToList(); var image = (string)rows[0].Image; Assert.StartsWith("@@@fileid@@@,xl/media/", image); } @@ -962,7 +961,7 @@ public void TestIssue304() new { Name="reddit", Image=File.ReadAllBytes(PathHelper.GetFile("images/reddit_logo.png"))}, new { Name="statck_overflow", Image=File.ReadAllBytes(PathHelper.GetFile("images/statck_overflow_logo.png"))}, }; - _excelExporter.Export(path, value); + _excelExporter.Export(path, value); Assert.Contains("/xl/media/", SheetHelper.GetZipFileContent(path, "xl/drawings/_rels/drawing1.xml.rels")); Assert.Contains("ext cx=\"609600\" cy=\"190500\"", SheetHelper.GetZipFileContent(path, "xl/drawings/drawing1.xml")); @@ -986,9 +985,9 @@ public void TestIssueI4HL54() { { "Texts",reader} }; - _excelTemplater.ApplyTemplate(path.ToString(), templatePath, value); + _excelTemplater.ApplyTemplate(path.ToString(), templatePath, value); - var rows = _excelImporter.Query(path.ToString(), true).ToList(); + var rows = _excelImporter.Query(path.ToString(), true).ToList(); Assert.Equal("Hello World1", rows[0].Text); Assert.Equal("Hello World2", rows[1].Text); } @@ -1003,21 +1002,21 @@ public void TestIssue294() { using var path = AutoDeletingPath.Create(); var value = new[] { new { Name = " Jack" } }; - _excelExporter.Export(path.ToString(), value); + _excelExporter.Export(path.ToString(), value); var sheetXml = SheetHelper.GetZipFileContent(path.ToString(), "xl/worksheets/sheet1.xml"); Assert.Contains("xml:space=\"preserve\"", sheetXml); } { using var path = AutoDeletingPath.Create(); var value = new[] { new { Name = "Ja ck" } }; - _excelExporter.Export(path.ToString(), value); + _excelExporter.Export(path.ToString(), value); var sheetXml = SheetHelper.GetZipFileContent(path.ToString(), "xl/worksheets/sheet1.xml"); Assert.DoesNotContain("xml:space=\"preserve\"", sheetXml); } { using var path = AutoDeletingPath.Create(); var value = new[] { new { Name = "Jack " } }; - _excelExporter.Export(path.ToString(), value); + _excelExporter.Export(path.ToString(), value); var sheetXml = SheetHelper.GetZipFileContent(path.ToString(), "xl/worksheets/sheet1.xml"); Assert.Contains("xml:space=\"preserve\"", sheetXml); } @@ -1038,7 +1037,7 @@ public void TestIssueI4DQUN() { "Title", "Hello & World < , > , \" , '" }, { "Details", new[] { new { Value = "Hello & Value < , > , \" , '" } } }, }; - _excelTemplater.ApplyTemplate(path.ToString(), templatePath, value); + _excelTemplater.ApplyTemplate(path.ToString(), templatePath, value); var sheetXml = SheetHelper.GetZipFileContent(path.ToString(), "xl/worksheets/sheet1.xml"); // Template now uses inlineStr format (...) instead of SharedStrings (...) @@ -1055,7 +1054,7 @@ public void TestIssue190() { using var path = AutoDeletingPath.Create(); var value = new TestIssue190Dto[] { }; - _excelExporter.Export(path.ToString(), value, configuration: new OpenXmlConfiguration { AutoFilter = false }); + _excelExporter.Export(path.ToString(), value, configuration: new OpenXmlConfiguration { AutoFilter = false }); var sheetXml = SheetHelper.GetZipFileContent(path.ToString(), "xl/worksheets/sheet1.xml"); Assert.DoesNotContain("", sheetXml); @@ -1063,7 +1062,7 @@ public void TestIssue190() { using var path = AutoDeletingPath.Create(); var value = new TestIssue190Dto[] { }; - _excelExporter.Export(path.ToString(), value); + _excelExporter.Export(path.ToString(), value); var sheetXml = SheetHelper.GetZipFileContent(path.ToString(), "xl/worksheets/sheet1.xml"); Assert.Contains("", sheetXml); @@ -1075,7 +1074,7 @@ public void TestIssue190() new() { ID = 1, Name = "Jack", Age = 32 }, new() { ID = 2, Name = "Lisa", Age = 45 } ]; - _excelExporter.Export(path.ToString(), value); + _excelExporter.Export(path.ToString(), value); var sheetXml = SheetHelper.GetZipFileContent(path.ToString(), "xl/worksheets/sheet1.xml"); Assert.Contains("", sheetXml); @@ -1101,8 +1100,8 @@ public void TestIssueI49RYZ() new() { Name="Lisa", UserType=null } ]; using var path = AutoDeletingPath.Create(); - _excelExporter.Export(path.ToString(), values); - var rows = _excelImporter.Query(path.ToString(), true).ToList(); + _excelExporter.Export(path.ToString(), values); + var rows = _excelImporter.Query(path.ToString(), true).ToList(); Assert.Equal("GeneralUser", rows[0].UserType); Assert.Equal("SuperAdministrator", rows[1].UserType); Assert.Equal("GeneralAdministrator", rows[2].UserType); @@ -1118,8 +1117,8 @@ public void TestIssue286() new() { E = TestIssue286Enum.VIP2 } ]; using var path = AutoDeletingPath.Create(); - _excelExporter.Export(path.ToString(), values); - var rows = _excelImporter.Query(path.ToString(), true).ToList(); + _excelExporter.Export(path.ToString(), values); + var rows = _excelImporter.Query(path.ToString(), true).ToList(); Assert.Equal("VIP1", rows[0].E); Assert.Equal("VIP2", rows[1].E); @@ -1160,11 +1159,11 @@ public void TestIssue283() { "sheet01", cn.ExecuteReader("select 'v1' col1") }, { "sheet02", cn.ExecuteReader("select 'v2' col1") } }; - var rows = _excelExporter.Export(path.ToString(), sheets); + var rows = _excelExporter.Export(path.ToString(), sheets); Assert.Equal(2, rows.Length); } - var sheetNames = _excelImporter.GetSheetNames(path.ToString()); + var sheetNames = _excelImporter.GetSheetNames(path.ToString()); Assert.Equal(["sheet01", "sheet02"], sheetNames); } @@ -1176,25 +1175,25 @@ public void TestIssueI40QA5() { { var path = PathHelper.GetFile("/xlsx/TestIssueI40QA5_1.xlsx"); - var rows = _excelImporter.Query(path).ToList(); + var rows = _excelImporter.Query(path).ToList(); Assert.Equal("E001", rows[0].Empno); Assert.Equal("E002", rows[1].Empno); } { var path = PathHelper.GetFile("/xlsx/TestIssueI40QA5_2.xlsx"); - var rows = _excelImporter.Query(path).ToList(); + var rows = _excelImporter.Query(path).ToList(); Assert.Equal("E001", rows[0].Empno); Assert.Equal("E002", rows[1].Empno); } { var path = PathHelper.GetFile("/xlsx/TestIssueI40QA5_3.xlsx"); - var rows = _excelImporter.Query(path).ToList(); + var rows = _excelImporter.Query(path).ToList(); Assert.Equal("E001", rows[0].Empno); Assert.Equal("E002", rows[1].Empno); } { var path = PathHelper.GetFile("/xlsx/TestIssueI40QA5_4.xlsx"); - var rows = _excelImporter.Query(path).ToList(); + var rows = _excelImporter.Query(path).ToList(); Assert.Null(rows[0].Empno); Assert.Null(rows[1].Empno); } @@ -1216,8 +1215,8 @@ public void TestIssues133() var value = new DataTable(); value.Columns.Add("Id"); value.Columns.Add("Name"); - _excelExporter.Export(path.ToString(), value); - var rows = _excelImporter.Query(path.ToString()).ToList(); + _excelExporter.Export(path.ToString(), value); + var rows = _excelImporter.Query(path.ToString()).ToList(); Assert.Equal("Id", rows[0].A); Assert.Equal("Name", rows[0].B); @@ -1229,8 +1228,8 @@ public void TestIssues133() using var path = AutoDeletingPath.Create(); var value = Array.Empty(); - _excelExporter.Export(path.ToString(), value); - var rows = _excelImporter.Query(path.ToString()).ToList(); + _excelExporter.Export(path.ToString(), value); + var rows = _excelImporter.Query(path.ToString()).ToList(); Assert.Equal("Id", rows[0].A); Assert.Equal("Name", rows[0].B); @@ -1254,7 +1253,7 @@ public void TestIssueI45TF5_2() { var value = new[] { new Dictionary { { "Col1&Col2", "V1&V2" } } }; var path = PathHelper.GetTempPath(); - _excelExporter.Export(path, value); + _excelExporter.Export(path, value); //System.Xml.XmlException : '<' is an unexpected token. The expected token is ';'. SheetHelper.GetZipFileContent(path, "xl/worksheets/sheet1.xml"); //check illegal format or not } @@ -1264,7 +1263,7 @@ public void TestIssueI45TF5_2() dt.Columns.Add("Col1&Col2"); dt.Rows.Add("V1&V2"); var path = PathHelper.GetTempPath(); - _excelExporter.Export(path, dt); + _excelExporter.Export(path, dt); //System.Xml.XmlException : '<' is an unexpected token. The expected token is ';'. SheetHelper.GetZipFileContent(path, "xl/worksheets/sheet1.xml"); //check illegal format or not } @@ -1274,7 +1273,7 @@ public void TestIssueI45TF5_2() public void TestIssueI45TF5() { using var path = AutoDeletingPath.Create(); - _excelExporter.Export(path.ToString(), new[] { new { C1 = "1&2;3,4", C2 = "1&2;3,4" } }); + _excelExporter.Export(path.ToString(), new[] { new { C1 = "1&2;3,4", C2 = "1&2;3,4" } }); var sheet1Xml = SheetHelper.GetZipFileContent(path.ToString(), "xl/worksheets/sheet1.xml"); Assert.DoesNotContain("", sheet1Xml); } @@ -1291,7 +1290,7 @@ public void TestIssue280() new() { ID = 2, Name = "Mike" } ]; using var path = AutoDeletingPath.Create(); - _excelExporter.Export(path.ToString(), value); + _excelExporter.Export(path.ToString(), value); } private class TestIssue280Dto @@ -1309,7 +1308,7 @@ private class TestIssue280Dto public void TestIssue272() { var path = PathHelper.GetFile("/xlsx/TestIssue272.xlsx"); - Assert.Throws(() => _excelImporter.Query(path).ToList()); + Assert.Throws(() => _excelImporter.Query(path).ToList()); } /// @@ -1319,7 +1318,7 @@ public void TestIssue272() public void TestIssue267() { var path = PathHelper.GetFile("/xlsx/TestIssue267.xlsx"); - var row = _excelImporter.Query(path).SingleOrDefault(); + var row = _excelImporter.Query(path).SingleOrDefault(); Assert.Equal(10618, row!.A); Assert.Equal("2021-02-23", row.B); Assert.Equal(43.199999999999996, row.C); @@ -1362,7 +1361,7 @@ public void TestIssueI3X2ZL() try { var path = PathHelper.GetFile("xlsx/TestIssueI3X2ZL_datetime_error.xlsx"); - var rows = _excelImporter.Query(path, startCell: "B3").ToList(); + var rows = _excelImporter.Query(path, startCell: "B3").ToList(); } catch (InvalidCastException ex) { @@ -1375,7 +1374,7 @@ public void TestIssueI3X2ZL() try { var path = PathHelper.GetFile("xlsx/TestIssueI3X2ZL_int_error.xlsx"); - var rows = _excelImporter.Query(path).ToList(); + var rows = _excelImporter.Query(path).ToList(); } catch (InvalidCastException ex) { @@ -1410,8 +1409,8 @@ public void Issue255() new Issue255DTO { Time = new DateTime(2021, 01, 01), Time2 = new DateTime(2021, 01, 01) } } }; - _excelTemplater.ApplyTemplate(path.ToString(), templatePath, value); - var rows = _excelImporter.Query(path.ToString()).ToList(); + _excelTemplater.ApplyTemplate(path.ToString(), templatePath, value); + var rows = _excelImporter.Query(path.ToString()).ToList(); Assert.Equal("2021", rows[1].A.ToString()); Assert.Equal("2021", rows[1].B.ToString()); } @@ -1422,8 +1421,8 @@ public void Issue255() { new Issue255DTO { Time = new DateTime(2021, 01, 01) } }; - _excelExporter.Export(path.ToString(), value); - var rows = _excelImporter.Query(path.ToString()).ToList(); + _excelExporter.Export(path.ToString(), value); + var rows = _excelImporter.Query(path.ToString()).ToList(); Assert.Equal("2021", rows[1].A.ToString()); } } @@ -1445,7 +1444,7 @@ private class Issue255DTO public void Issue256() { var path = PathHelper.GetFile("xlsx/TestIssue256.xlsx"); - var rows = _excelImporter.Query(path, false).ToList(); + var rows = _excelImporter.Query(path, false).ToList(); Assert.Equal(new DateTime(2003, 4, 16), rows[1].A); Assert.Equal(new DateTime(2004, 4, 16), rows[1].B); } @@ -1457,10 +1456,10 @@ public void Issue256() public void Issue242() { var path = PathHelper.GetFile("xls/TestIssue242.xls"); - Assert.Throws(() => _excelImporter.Query(path).ToList()); + Assert.Throws(() => _excelImporter.Query(path).ToList()); using var stream = File.OpenRead(path); - Assert.Throws(() => _excelImporter.Query(stream).ToList()); + Assert.Throws(() => _excelImporter.Query(stream).ToList()); } /// @@ -1508,7 +1507,7 @@ public void Issue132() new { name = "Henry", Age = 36, InDate = new DateTime(2020,05,03)}, }; - _excelExporter.Export(path.ToString(), value); + _excelExporter.Export(path.ToString(), value); } { @@ -1522,7 +1521,7 @@ public void Issue132() { TableStyles = TableStyles.None }; - _excelExporter.Export(path.ToString(), value, configuration: config); + _excelExporter.Export(path.ToString(), value, configuration: config); } { @@ -1534,7 +1533,7 @@ public void Issue132() new { name = "Henry", Age = 36, InDate = new DateTime(2020,05,03)}, }) ); - _excelExporter.Export(path.ToString(), value); + _excelExporter.Export(path.ToString(), value); } } @@ -1564,23 +1563,23 @@ public void Issue235() dataSet.Tables.Add(users); dataSet.Tables.Add(department); - var rowsWritten = _excelExporter.Export(path.ToString(), dataSet); + var rowsWritten = _excelExporter.Export(path.ToString(), dataSet); Assert.Equal(2, rowsWritten.Length); Assert.Equal(2, rowsWritten[0]); - var sheetNames = _excelImporter.GetSheetNames(path.ToString()); + var sheetNames = _excelImporter.GetSheetNames(path.ToString()); Assert.Equal("users", sheetNames[0]); Assert.Equal("department", sheetNames[1]); { - var rows = _excelImporter.Query(path.ToString(), true, sheetName: "users").ToList(); + var rows = _excelImporter.Query(path.ToString(), true, sheetName: "users").ToList(); Assert.Equal("Jack", rows[0].Name); Assert.Equal(25, rows[0].Age); Assert.Equal("Mike", rows[1].Name); Assert.Equal(44, rows[1].Age); } { - var rows = _excelImporter.Query(path.ToString(), true, sheetName: "department").ToList(); + var rows = _excelImporter.Query(path.ToString(), true, sheetName: "department").ToList(); Assert.Equal("01", rows[0].ID); Assert.Equal("HR", rows[0].Name); Assert.Equal("02", rows[1].ID); @@ -1596,7 +1595,7 @@ public void Issue233() { var path = PathHelper.GetFile("xlsx/TestIssue233.xlsx"); - var dt = _excelImporter.QueryAsDataTable(path); + var dt = _excelImporter.QueryAsDataTable(path); var rows = dt.Rows; @@ -1628,21 +1627,21 @@ public void Issue234() ["users"] = users, ["department"] = department }; - _excelExporter.Export(path, sheets); + _excelExporter.Export(path, sheets); - var sheetNames = _excelImporter.GetSheetNames(path); + var sheetNames = _excelImporter.GetSheetNames(path); Assert.Equal("users", sheetNames[0]); Assert.Equal("department", sheetNames[1]); { - var rows = _excelImporter.Query(path, true, sheetName: "users").ToList(); + var rows = _excelImporter.Query(path, true, sheetName: "users").ToList(); Assert.Equal("Jack", rows[0].Name); Assert.Equal(25, rows[0].Age); Assert.Equal("Mike", rows[1].Name); Assert.Equal(44, rows[1].Age); } { - var rows = _excelImporter.Query(path, true, sheetName: "department").ToList(); + var rows = _excelImporter.Query(path, true, sheetName: "department").ToList(); Assert.Equal("01", rows[0].ID); Assert.Equal("HR", rows[0].Name); Assert.Equal("02", rows[1].ID); @@ -1698,7 +1697,7 @@ public void Issue230() { using var path = AutoDeletingPath.Create(); _excelExporter.Export(path.ToString(), reader, printHeader: true); - var rows = _excelImporter.Query(path.ToString(), true).ToList(); + var rows = _excelImporter.Query(path.ToString(), true).ToList(); Assert.Equal(1, rows[0].id); Assert.Equal(2, rows[1].id); } @@ -1713,7 +1712,7 @@ public void Issue229() { var path = PathHelper.GetFile("xlsx/TestIssue229.xlsx"); - using var dt = _excelImporter.QueryAsDataTable(path); + using var dt = _excelImporter.QueryAsDataTable(path); foreach (DataColumn column in dt.Columns) { @@ -1736,7 +1735,7 @@ public void Issue122() { var path = PathHelper.GetFile("xlsx/TestIssue122.xlsx"); { - var rows = _excelImporter.Query(path, useHeaderRow: true, configuration: config).ToList(); + var rows = _excelImporter.Query(path, useHeaderRow: true, configuration: config).ToList(); Assert.Equal("HR", rows[0].Department); Assert.Equal("HR", rows[1].Department); Assert.Equal("HR", rows[2].Department); @@ -1749,7 +1748,7 @@ public void Issue122() { var path = PathHelper.GetFile("xlsx/TestIssue122_2.xlsx"); { - var rows = _excelImporter.Query(path, useHeaderRow: true, configuration: config).ToList(); + var rows = _excelImporter.Query(path, useHeaderRow: true, configuration: config).ToList(); Assert.Equal("V1", rows[2].Test1); Assert.Equal("V2", rows[5].Test2); Assert.Equal("V3", rows[1].Test3); @@ -1776,7 +1775,7 @@ public void Issue227() { var path = PathHelper.GetFile("xlsx/TestIssue227.xlsm"); { - var rows = _excelImporter.Query(path).ToList(); + var rows = _excelImporter.Query(path).ToList(); Assert.Equal(100, rows.Count); Assert.Equal(Guid.Parse("78DE23D2-DCB6-BD3D-EC67-C112BBC322A2"), rows[0].ID); @@ -1789,7 +1788,7 @@ public void Issue227() } { using var stream = File.OpenRead(path); - var rows = _excelImporter.Query(stream).ToList(); + var rows = _excelImporter.Query(stream).ToList(); Assert.Equal(100, rows.Count); Assert.Equal(Guid.Parse("78DE23D2-DCB6-BD3D-EC67-C112BBC322A2"), rows[0].ID); @@ -1814,7 +1813,7 @@ public void Issue226() { using var path = AutoDeletingPath.Create(); var templatePath = PathHelper.GetFile("xlsx/TestIssue226.xlsx"); - _excelTemplater.ApplyTemplate(path.ToString(), templatePath, new { employees = new[] { new { name = "123" }, new { name = "123" } } }); + _excelTemplater.ApplyTemplate(path.ToString(), templatePath, new { employees = new[] { new { name = "123" }, new { name = "123" } } }); Assert.Equal("A1:A3", SheetHelper.GetFirstSheetDimensionRefValue(path.ToString())); } @@ -1834,7 +1833,7 @@ public void Issue223() using var path = AutoDeletingPath.Create(); _excelExporter.Export(path.ToString(), value); - using var dt = _excelImporter.QueryAsDataTable(path.ToString()); + using var dt = _excelImporter.QueryAsDataTable(path.ToString()); var columns = dt.Columns; Assert.Equal(typeof(object), columns[0].DataType); @@ -1852,7 +1851,7 @@ public void Issue223() public void Issue222() { var path = PathHelper.GetFile("xlsx/TestIssue222.xlsx"); - var rows = _excelImporter.Query(path).ToList(); + var rows = _excelImporter.Query(path).ToList(); Assert.Equal(typeof(DateTime), rows[1].A.GetType()); Assert.Equal(new DateTime(2021, 4, 29), rows[1].A); } @@ -1866,7 +1865,7 @@ public void Issue147() { { var path = PathHelper.GetFile("xlsx/TestIssue147.xlsx"); - var rows = _excelImporter.Query(path, useHeaderRow: false, startCell: "C3", sheetName: "Sheet1").ToList(); + var rows = _excelImporter.Query(path, useHeaderRow: false, startCell: "C3", sheetName: "Sheet1").ToList(); Assert.Equal(["C", "D", "E"], (rows[0] as IDictionary)?.Keys); Assert.Equal(["Column1", "Column2", "Column3"], new[] { rows[0].C as string, rows[0].D as string, rows[0].E as string }); @@ -1880,13 +1879,13 @@ public void Issue147() Assert.Equal(11, rows.Count); - var columns = _excelImporter.GetColumnNames(path, startCell: "C3"); + var columns = _excelImporter.GetColumnNames(path, startCell: "C3"); Assert.Equal(["C", "D", "E"], columns); } { var path = PathHelper.GetFile("xlsx/TestIssue147.xlsx"); - var rows = _excelImporter.Query(path, useHeaderRow: true, startCell: "C3", sheetName: "Sheet1").ToList(); + var rows = _excelImporter.Query(path, useHeaderRow: true, startCell: "C3", sheetName: "Sheet1").ToList(); Assert.Equal(["Column1", "Column2", "Column3"], (rows[0] as IDictionary)?.Keys); Assert.Equal(["C4", "D4", "E4"], new[] { rows[0].Column1 as string, rows[0].Column2 as string, rows[0].Column3 as string }); @@ -1898,7 +1897,7 @@ public void Issue147() Assert.Equal(10, rows.Count); - var columns = _excelImporter.GetColumnNames(path, useHeaderRow: true, startCell: "C3"); + var columns = _excelImporter.GetColumnNames(path, useHeaderRow: true, startCell: "C3"); Assert.Equal(["Column1", "Column2", "Column3"], columns); } } @@ -1917,8 +1916,8 @@ public void Issue211() using var connection = new SQLiteConnection(connectionString); var reader = connection.ExecuteReader(@"select 1 Test1,2 Test2 union all select 3 , 4 union all select 5 ,6"); - _excelExporter.Export(path.ToString(), reader); - var rows = _excelImporter.Query(path.ToString(), true).ToList(); + _excelExporter.Export(path.ToString(), reader); + var rows = _excelImporter.Query(path.ToString(), true).ToList(); Assert.Equal(1.0, rows[0].Test1); Assert.Equal(2.0, rows[0].Test2); @@ -1938,10 +1937,10 @@ public void Issue216() new { Test1 = "1", Test2 = 2 }, new { Test1 = "3", Test2 = 4 } }; - _excelExporter.Export(path.ToString(), value); + _excelExporter.Export(path.ToString(), value); { - using var table = _excelImporter.QueryAsDataTable(path.ToString()); + using var table = _excelImporter.QueryAsDataTable(path.ToString()); Assert.Equal("Test1", table.Columns[0].ColumnName); Assert.Equal("Test2", table.Columns[1].ColumnName); @@ -1952,7 +1951,7 @@ public void Issue216() } { - using var dt = _excelImporter.QueryAsDataTable(path.ToString(), false); + using var dt = _excelImporter.QueryAsDataTable(path.ToString(), false); Assert.Equal("Test1", dt.Rows[0]["A"]); Assert.Equal("Test2", dt.Rows[0]["B"]); @@ -1973,18 +1972,18 @@ public void IssueI3OSKV() { using var path = AutoDeletingPath.Create(); var value = new[] { new { Test = "12345678901234567890" } }; - _excelExporter.Export(path.ToString(), value); + _excelExporter.Export(path.ToString(), value); - var A2 = _excelImporter.Query(path.ToString(), true).First().Test; + var A2 = _excelImporter.Query(path.ToString(), true).First().Test; Assert.Equal("12345678901234567890", A2); } { using var path = AutoDeletingPath.Create(); var value = new[] { new { Test = 123456.789 } }; - _excelExporter.Export(path.ToString(), value); + _excelExporter.Export(path.ToString(), value); - var A2 = _excelImporter.Query(path.ToString(), true).First().Test; + var A2 = _excelImporter.Query(path.ToString(), true).First().Test; Assert.Equal(123456.789, A2); } } @@ -1998,7 +1997,7 @@ public void IssueI3OSKV() public void Issue220() { var path = PathHelper.GetFile("xlsx/TestIssue220.xlsx"); - var rows = _excelImporter.Query(path, useHeaderRow: true); + var rows = _excelImporter.Query(path, useHeaderRow: true); var result = rows .GroupBy(s => s.PRT_ID) .Select(g => new @@ -2023,7 +2022,7 @@ public void Issue215() { using var stream = new MemoryStream(); _excelExporter.Export(stream, new[] { new { V = "test1" }, new { V = "test2" } }); - var rows = _excelImporter.Query(stream, true).ToList(); + var rows = _excelImporter.Query(stream, true).ToList(); Assert.Equal("test1", rows[0].V); Assert.Equal("test2", rows[1].V); @@ -2046,7 +2045,7 @@ public void Issue217() using var path = AutoDeletingPath.Create(); _excelExporter.Export(path.ToString(), table); - var rows = _excelImporter.Query(path.ToString()).ToList(); + var rows = _excelImporter.Query(path.ToString()).ToList(); Assert.Equal("Name", rows[0].B); Assert.Equal("Limit", rows[0].C); } @@ -2062,7 +2061,7 @@ public void Issue212() using var path = AutoDeletingPath.Create(); _excelExporter.Export(path.ToString(), new[] { new { x = 1, y = 2 } }, sheetName: sheetName); - var actualSheetName = _excelImporter.GetSheetNames(path.ToString()).ToList()[0]; + var actualSheetName = _excelImporter.GetSheetNames(path.ToString()).ToList()[0]; Assert.Equal(sheetName, actualSheetName); } @@ -2089,7 +2088,7 @@ public void Issue207() }; _excelTemplater.ApplyTemplate(path, tempaltePath, value); - var rows = _excelImporter.Query(path).ToList(); + var rows = _excelImporter.Query(path).ToList(); Assert.Equal("項目1", rows[0].A); Assert.Equal("[]內容1,[]內容2,[]內容3,[]內容4,[]內容5", rows[0].B); @@ -2132,8 +2131,8 @@ public void Issue207() } }; - _excelTemplater.ApplyTemplate(path, tempaltePath, value); - var rows = _excelImporter.Query(path).ToList(); + _excelTemplater.ApplyTemplate(path, tempaltePath, value); + var rows = _excelImporter.Query(path).ToList(); Assert.Equal("項目1", rows[0].A); Assert.Equal("[]內容1,[]內容2,[]內容3,[]內容4,[]內容5", rows[0].C); @@ -2161,8 +2160,8 @@ public void Issue87() Tests = Enumerable.Range(1, 5).Select((_, i) => new { test1 = i, test2 = i }) }; - var rows = _excelImporter.Query(templatePath).ToList(); - _excelTemplater.ApplyTemplate(path.ToString(), templatePath, value); + var rows = _excelImporter.Query(templatePath).ToList(); + _excelTemplater.ApplyTemplate(path.ToString(), templatePath, value); } /// @@ -2172,7 +2171,7 @@ public void Issue87() public void Issue208() { var path = PathHelper.GetFile("xlsx/TestIssue208.xlsx"); - var columns = _excelImporter.GetColumnNames(path).ToList(); + var columns = _excelImporter.GetColumnNames(path).ToList(); Assert.Equal(16384, columns.Count); Assert.Equal("XFD", columns[16383]); } @@ -2196,7 +2195,7 @@ public void Issue206() { ["employees"] = dt }; - _excelTemplater.ApplyTemplate(path.ToString(), templatePath, value); + _excelTemplater.ApplyTemplate(path.ToString(), templatePath, value); var dimension = SheetHelper.GetFirstSheetDimensionRefValue(path.ToString()); Assert.Equal("A1:B2", dimension); @@ -2212,7 +2211,7 @@ public void Issue206() dt.Rows.Add("Jack", "HR"); var value = new Dictionary { ["employees"] = dt }; - _excelTemplater.ApplyTemplate(path.ToString(), templatePath, value); + _excelTemplater.ApplyTemplate(path.ToString(), templatePath, value); var dimension = SheetHelper.GetFirstSheetDimensionRefValue(path.ToString()); Assert.Equal("A1:B2", dimension); @@ -2248,11 +2247,11 @@ public void Issue193() new { name = "Keaton", department = "IT" } } }; - _excelTemplater.ApplyTemplate(path, templatePath, value); + _excelTemplater.ApplyTemplate(path, templatePath, value); - foreach (var sheetName in _excelImporter.GetSheetNames(path)) + foreach (var sheetName in _excelImporter.GetSheetNames(path)) { - var rows = _excelImporter.Query(path, sheetName: sheetName).ToList(); + var rows = _excelImporter.Query(path, sheetName: sheetName).ToList(); Assert.Equal(9, rows.Count); Assert.Equal("FooCompany", rows[0].A); @@ -2299,8 +2298,8 @@ public void Issue193() new {name="Keaton",department="IT"} } }; - _excelTemplater.ApplyTemplate(path.ToString(), templatePath, value); - var rows = _excelImporter.Query(path.ToString()).ToList(); + _excelTemplater.ApplyTemplate(path.ToString(), templatePath, value); + var rows = _excelImporter.Query(path.ToString()).ToList(); Assert.Equal("FooCompany", rows[0].A); Assert.Equal("Jack", rows[2].B); @@ -2393,11 +2392,11 @@ public void Issue157() } ] """); - _excelExporter.Export(path, input); + _excelExporter.Export(path, input); - var rows = _excelImporter.Query(path, sheetName: "Sheet1").ToList(); + var rows = _excelImporter.Query(path, sheetName: "Sheet1").ToList(); Assert.Equal(6, rows.Count); - Assert.Equal("Sheet1", _excelImporter.GetSheetNames(path).First()); + Assert.Equal("Sheet1", _excelImporter.GetSheetNames(path).First()); using var p = new ExcelPackage(new FileInfo(path)); var ws = p.Workbook.Worksheets.First(); @@ -2408,9 +2407,9 @@ public void Issue157() var path = PathHelper.GetFile("xlsx/TestIssue157.xlsx"); { - var rows = _excelImporter.Query(path, sheetName: "Sheet1").ToList(); + var rows = _excelImporter.Query(path, sheetName: "Sheet1").ToList(); Assert.Equal(6, rows.Count); - Assert.Equal("Sheet1", _excelImporter.GetSheetNames(path).First()); + Assert.Equal("Sheet1", _excelImporter.GetSheetNames(path).First()); } using (var p = new ExcelPackage(new FileInfo(path))) { @@ -2420,7 +2419,7 @@ public void Issue157() } { - var rows = _excelImporter.Query(path, sheetName: "Sheet1").ToList(); + var rows = _excelImporter.Query(path, sheetName: "Sheet1").ToList(); Assert.Equal(5, rows.Count); Assert.Equal(Guid.Parse("78DE23D2-DCB6-BD3D-EC67-C112BBC322A2"), rows[0].ID); @@ -2453,7 +2452,7 @@ public void Issue149() { var path = PathHelper.GetFile("xlsx/TestIssue149.xlsx"); - var rows = _excelImporter.Query(path).Select(s => (string)s.A).ToList(); + var rows = _excelImporter.Query(path).Select(s => (string)s.A).ToList(); for (int i = 0; i < chars.Length; i++) { //output.WriteLine($"{i} , {chars[i]} , {rows[i]}"); @@ -2467,9 +2466,9 @@ public void Issue149() { using var path = AutoDeletingPath.Create(); var input = chars.Select(s => new { Test = s.ToString() }); - _excelExporter.Export(path.ToString(), input); + _excelExporter.Export(path.ToString(), input); - var rows = _excelImporter.Query(path.ToString(), true).Select(s => (string)s.Test).ToList(); + var rows = _excelImporter.Query(path.ToString(), true).Select(s => (string)s.Test).ToList(); for (int i = 0; i < chars.Length; i++) { _output.WriteLine($"{i}, {chars[i]}, {rows[i]}"); @@ -2483,9 +2482,9 @@ public void Issue149() { using var path = AutoDeletingPath.Create(); var input = chars.Select(s => new { Test = s.ToString() }); - _excelExporter.Export(path.ToString(), input); + _excelExporter.Export(path.ToString(), input); - var rows = _excelImporter.Query(path.ToString()).Select(s => s.Test).ToList(); + var rows = _excelImporter.Query(path.ToString()).Select(s => s.Test).ToList(); for (int i = 0; i < chars.Length; i++) { _output.WriteLine($"{i}, {chars[i]}, {rows[i]}"); @@ -2509,7 +2508,7 @@ private class Issue149VO public void Issue153() { var path = PathHelper.GetFile("xlsx/TestIssue153.xlsx"); - var rows = _excelImporter.Query(path, true).First() as IDictionary; + var rows = _excelImporter.Query(path, true).First() as IDictionary; Assert.Equal( [ "序号", "代号", "新代号", "名称", "XXX", "部门名称", "单位", "ERP工时 (小时)A", "工时(秒) A/3600", "标准人工工时(秒)", @@ -2525,7 +2524,7 @@ public void Issue137() { var path = PathHelper.GetFile("xlsx/TestIssue137.xlsx"); { - var rows = _excelImporter.Query(path).ToList(); + var rows = _excelImporter.Query(path).ToList(); var first = rows[0] as IDictionary; // https://user-images.githubusercontent.com/12729184/113266322-ba06e400-9307-11eb-9521-d36abfda75cc.png Assert.Equal(["A", "B", "C", "D", "E", "F", "G", "H"], first?.Keys.ToArray()); Assert.Equal(11, rows.Count); @@ -2559,7 +2558,7 @@ public void Issue137() // dynamic query with head { - var rows = _excelImporter.Query(path, true).ToList(); + var rows = _excelImporter.Query(path, true).ToList(); var first = rows[0] as IDictionary; //![image](https://user-images.githubusercontent.com/12729184/113266322-ba06e400-9307-11eb-9521-d36abfda75cc.png) Assert.Equal(["比例", "商品", "滿倉口數", "0", "1為港幣 0為台幣"], first?.Keys.ToArray()); Assert.Equal(10, rows.Count); @@ -2579,7 +2578,7 @@ public void Issue137() } { - var rows = _excelImporter.Query(path).ToList(); + var rows = _excelImporter.Query(path).ToList(); Assert.Equal(10, rows.Count); { var row = rows[0]; @@ -2611,7 +2610,7 @@ public void Issue138() { var path = PathHelper.GetFile("xlsx/TestIssue138.xlsx"); { - var rows = _excelImporter.Query(path, true).ToList(); + var rows = _excelImporter.Query(path, true).ToList(); Assert.Equal(6, rows.Count); foreach (var index in new[] { 0, 2, 5 }) @@ -2636,7 +2635,7 @@ public void Issue138() } { - var rows = _excelImporter.Query(path).ToList(); + var rows = _excelImporter.Query(path).ToList(); Assert.Equal(6, rows.Count); Assert.Equal(new DateTime(2021, 3, 1), rows[0].Date); @@ -2829,9 +2828,9 @@ public void Issue527() var template = PathHelper.GetFile("xlsx/Issue527Template.xlsx"); using var path = AutoDeletingPath.Create(); - _excelTemplater.ApplyTemplate(path.FilePath, template, value); + _excelTemplater.ApplyTemplate(path.FilePath, template, value); - var rows = _excelImporter.Query(path.FilePath).ToList(); + var rows = _excelImporter.Query(path.FilePath).ToList(); Assert.Equal("General User", rows[1].B); Assert.Equal("General Administrator", rows[2].B); } @@ -2867,7 +2866,7 @@ WITH test('Id', 'Name') AS ( using var path = AutoDeletingPath.Create(); _excelExporter.Export(path.FilePath, reader, configuration: excelconfig, overwriteFile: true); - var rows = _excelImporter.Query(path.FilePath).ToList(); + var rows = _excelImporter.Query(path.FilePath).ToList(); Assert.All(rows, x => Assert.Single(x)); Assert.Equal("Name", rows[0].A); } @@ -2904,13 +2903,13 @@ public void Issue585() { var path = PathHelper.GetFile("xlsx/TestIssue585.xlsx"); - var items1 = _excelImporter.Query(path); + var items1 = _excelImporter.Query(path); Assert.Equal(2, items1.Count()); - var items2 = _excelImporter.Query(path); + var items2 = _excelImporter.Query(path); Assert.Equal(2, items2.Count()); - var items3 = _excelImporter.Query(path); + var items3 = _excelImporter.Query(path); Assert.Equal(2, items3.Count()); } @@ -2925,8 +2924,8 @@ public void Issue_542() { var path = PathHelper.GetFile("xlsx/TestIssue542.xlsx"); - var resultWithoutFirstRow = _excelImporter.Query(path).ToList(); - var resultWithFirstRow = _excelImporter.Query(path, treatHeaderAsData: true).ToList(); + var resultWithoutFirstRow = _excelImporter.Query(path).ToList(); + var resultWithFirstRow = _excelImporter.Query(path, treatHeaderAsData: true).ToList(); Assert.Equal(15, resultWithoutFirstRow.Count); Assert.Equal(16, resultWithFirstRow.Count); @@ -2978,7 +2977,7 @@ public void Issue606_1() ); var templateFileName = PathHelper.GetFile("xlsx/TestIssue606_Template.xlsx"); - _excelTemplater.ApplyTemplate(path, Path.GetFullPath(templateFileName), value); + _excelTemplater.ApplyTemplate(path, Path.GetFullPath(templateFileName), value); File.Delete(path); } @@ -3069,7 +3068,7 @@ static IEnumerable GetTestData() memoryStream.Position = 0; - var queryData = _excelImporter.Query(memoryStream).ToList(); + var queryData = _excelImporter.Query(memoryStream).ToList(); Assert.Equal(testData.Count(), queryData.Count); @@ -3105,7 +3104,7 @@ static IEnumerable GetTestData() memoryStream.Position = 0; - var queryData = _excelImporter.QueryAsync(memoryStream).ToBlockingEnumerable().ToList(); + var queryData = _excelImporter.QueryAsync(memoryStream).ToBlockingEnumerable().ToList(); Assert.Equal(testData.Count(), queryData.Count); @@ -3123,10 +3122,10 @@ public void Issue_686() { var path = PathHelper.GetFile("xlsx/TestIssue686.xlsx"); Assert.Throws(() => - _excelImporter.QueryRange(path, useHeaderRow: false, startCell: "ZZFF10", endCell: "ZZFF11").First()); + _excelImporter.QueryRange(path, useHeaderRow: false, startCell: "ZZFF10", endCell: "ZZFF11").First()); Assert.Throws(() => - _excelImporter.QueryRange(path, useHeaderRow: false, startCell: "ZZFF@@10", endCell: "ZZFF@@11").First()); + _excelImporter.QueryRange(path, useHeaderRow: false, startCell: "ZZFF@@10", endCell: "ZZFF@@11").First()); } [Fact] @@ -3152,8 +3151,8 @@ private class Issue697 public void Test_Issue_697_EmptyRowsStronglyTypedQuery() { var path = PathHelper.GetFile("xlsx/TestIssue697.xlsx"); - var rowsIgnoreEmpty = _excelImporter.Query(path, configuration: new OpenXmlConfiguration { IgnoreEmptyRows = true }).ToList(); - var rowsCountEmpty = _excelImporter.Query(path).ToList(); + var rowsIgnoreEmpty = _excelImporter.Query(path, configuration: new OpenXmlConfiguration { IgnoreEmptyRows = true }).ToList(); + var rowsCountEmpty = _excelImporter.Query(path).ToList(); Assert.Equal(4, rowsIgnoreEmpty.Count); Assert.Equal(5, rowsCountEmpty.Count); } @@ -3169,7 +3168,7 @@ public void Issue_710() }); memoryStream.Position = 0; - using var dataReader = _excelImporter.GetDataReader(memoryStream, useHeaderRow: false); + using var dataReader = _excelImporter.GetDataReader(memoryStream, useHeaderRow: false); dataReader.Read(); for (int i = 0; i < dataReader.FieldCount; i++) @@ -3188,9 +3187,9 @@ public void Issue_732_First_Sheet_Active() var path2 = PathHelper.GetFile("xlsx/TestIssue732_2.xlsx"); var path3 = PathHelper.GetFile("xlsx/TestIssue732_3.xlsx"); - var info1 = _excelImporter.GetSheetInformations(path1); - var info2 = _excelImporter.GetSheetInformations(path2); - var info3 = _excelImporter.GetSheetInformations(path3); + var info1 = _excelImporter.GetSheetInformations(path1); + var info2 = _excelImporter.GetSheetInformations(path2); + var info3 = _excelImporter.GetSheetInformations(path3); Assert.Equal(0u, info1.SingleOrDefault(x => x.Active)?.Index); // first sheet is active Assert.Equal(1u, info2.SingleOrDefault(x => x.Active)?.Index); // second sheet is active @@ -3209,9 +3208,9 @@ public void TestIssue750() ["list"] = Enumerable.Range(0, 10_000) .Select(_ => new { value1 = Guid.NewGuid(), value2 = Guid.NewGuid(), }) }; - _excelTemplater.ApplyTemplate(path.ToString(), templatePath, data); + _excelTemplater.ApplyTemplate(path.ToString(), templatePath, data); - var rows = _excelImporter.Query(path.ToString()) + var rows = _excelImporter.Query(path.ToString()) .Skip(1453) .Take(2) .ToList(); @@ -3241,7 +3240,7 @@ public void TestIssue751() { ["list"] = list }; - _excelTemplater.ApplyTemplate(path.ToString(), templatePath, data); + _excelTemplater.ApplyTemplate(path.ToString(), templatePath, data); using var stream = File.OpenRead(path.ToString()); using var workbook = new XSSFWorkbook(stream); @@ -3270,7 +3269,7 @@ public void TestIssue751() public void TestIssue763() { var path = PathHelper.GetFile("xlsx/TestIssue763.xlsx"); - var rows = _excelImporter.QueryRange(path, startCell: "A3", endCell: "J3").ToArray(); + var rows = _excelImporter.QueryRange(path, startCell: "A3", endCell: "J3").ToArray(); Assert.Equal("A3", rows[0].A); Assert.Null(rows[0].J); } @@ -3300,7 +3299,7 @@ public void TestIssue768() }; _excelTemplater.ApplyTemplate(path.ToString(), templatePath, data); - var rows = _excelImporter.Query(path.ToString(), startCell: "A16").ToList(); + var rows = _excelImporter.Query(path.ToString(), startCell: "A16").ToList(); Assert.Equal(list[0].value1.ToString(), rows[0].A.ToString()); Assert.Equal(list[1].value1.ToString(), rows[1].A.ToString()); @@ -3363,8 +3362,8 @@ public void TestIssue771() list12 = GetEnumerable() }; - _excelTemplater.ApplyTemplate(path.FilePath, template, value); - var rows = _excelImporter.Query(path.FilePath).ToList(); + _excelTemplater.ApplyTemplate(path.FilePath, template, value); + var rows = _excelImporter.Query(path.FilePath).ToList(); Assert.Equal("2025-1", rows[2].B); Assert.Null(rows[3].B); @@ -3382,7 +3381,7 @@ public void TestIssue771() public void TestIssue772() { var path = PathHelper.GetFile("xlsx/TestIssue772.xlsx"); - var rows = _excelImporter.Query(path, sheetName: "Supply plan(daily)", startCell: "A1") + var rows = _excelImporter.Query(path, sheetName: "Supply plan(daily)", startCell: "A1") .Cast>() .ToArray(); @@ -3406,8 +3405,8 @@ public void TestIssue773() var fill = new { t = a }; using var path = AutoDeletingPath.Create(); - _excelTemplater.ApplyTemplate(path.FilePath, templatePath, fill); - var rows = _excelImporter.Query(path.FilePath).ToList(); + _excelTemplater.ApplyTemplate(path.FilePath, templatePath, fill); + var rows = _excelImporter.Query(path.FilePath).ToList(); Assert.Equal("H1", rows[4].AF); Assert.Equal("c3", rows[6].AA); @@ -3426,7 +3425,7 @@ public void TestIssue789() new Dictionary { {"no","2"} }, new Dictionary { {"no","3"} }, }; - _excelExporter.Export(path, value); + _excelExporter.Export(path, value); var xml = SheetHelper.GetZipFileContent(path.ToString(), "xl/worksheets/sheet1.xml"); @@ -3471,7 +3470,7 @@ public void TestIssue814() } ]; - _excelTemplater.AddPicture(path.FilePath, images); + _excelTemplater.AddPicture(path.FilePath, images); using var package = new ExcelPackage(new FileInfo(path.FilePath)); @@ -3524,7 +3523,7 @@ public void TestIssue815() } ]; - _excelTemplater.AddPicture(path.FilePath, images); + _excelTemplater.AddPicture(path.FilePath, images); using (var package = new ExcelPackage(new FileInfo(path.FilePath))) { @@ -3583,7 +3582,7 @@ public void TestIssue816() } ]; - _excelTemplater.AddPicture(path.FilePath, images); + _excelTemplater.AddPicture(path.FilePath, images); using var package = new ExcelPackage(new FileInfo(path.FilePath)); @@ -3635,7 +3634,7 @@ public void TestIssue816() } ]; - _excelTemplater.AddPicture(path.FilePath, images); + _excelTemplater.AddPicture(path.FilePath, images); using var package = new ExcelPackage(new FileInfo(path.FilePath)); // Check picture in the first sheet (C3) @@ -3684,7 +3683,7 @@ public void TestIssue816() public void TestIssue809() { var path = PathHelper.GetFile("xlsx/TestIssue809.xlsx"); - var rows = _excelImporter.Query(path).ToList(); + var rows = _excelImporter.Query(path).ToList(); Assert.Equal(3, rows.Count); Assert.Null(rows[0].A);