From b7e7b541685c612143b0e71e175cef520dc94daa Mon Sep 17 00:00:00 2001 From: Victor Irzak Date: Sun, 29 Jun 2025 20:55:11 -0400 Subject: [PATCH 1/5] Remove .NET 9 and add .NET 10 --- .github/workflows/dotnet.yml | 10 ++-- .../MiniExcel.Benchmarks.csproj | 2 +- src/MiniExcel/MiniExcelLibs.csproj | 2 +- .../OpenXml/ExcelOpenXmlSheetReader.cs | 46 +++++++++++++++++-- .../OpenXml/ExcelOpenXmlSheetWriter.cs | 26 ++++++++++- .../OpenXml/Styles/SheetStyleBuildContext.cs | 20 ++++++++ .../Picture/MiniExcelPictureImplement.cs | 13 +++++- .../ExcelOpenXmlTemplate.MergeCells.cs | 12 +++++ .../SaveByTemplate/ExcelOpenXmlTemplate.cs | 39 ++++++++++++++-- tests/MiniExcelTests/MiniExcelTests.csproj | 2 +- 10 files changed, 153 insertions(+), 19 deletions(-) diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml index 5cf65e17..a3b4eca6 100644 --- a/.github/workflows/dotnet.yml +++ b/.github/workflows/dotnet.yml @@ -13,14 +13,12 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Setup .NET 8 + - name: Setup .NET uses: actions/setup-dotnet@v4 with: - dotnet-version: 8.0.x - - name: Setup .NET 9 - uses: actions/setup-dotnet@v4 - with: - dotnet-version: 9.0.x + dotnet-version: | + 8.0.x + 10.0.x - name: Restore dependencies run: dotnet restore env: diff --git a/benchmarks/MiniExcel.Benchmarks/MiniExcel.Benchmarks.csproj b/benchmarks/MiniExcel.Benchmarks/MiniExcel.Benchmarks.csproj index 3459b9fb..0d2a9f57 100644 --- a/benchmarks/MiniExcel.Benchmarks/MiniExcel.Benchmarks.csproj +++ b/benchmarks/MiniExcel.Benchmarks/MiniExcel.Benchmarks.csproj @@ -2,7 +2,7 @@ Exe - net8.0;net9.0 + net8.0;net10.0 enable enable latest diff --git a/src/MiniExcel/MiniExcelLibs.csproj b/src/MiniExcel/MiniExcelLibs.csproj index 1911d2cd..917a9573 100644 --- a/src/MiniExcel/MiniExcelLibs.csproj +++ b/src/MiniExcel/MiniExcelLibs.csproj @@ -1,6 +1,6 @@  - net462;netstandard2.0;net8.0;net9.0 + net462;netstandard2.0;net8.0;net10.0 2.0.0-beta.1 enable diff --git a/src/MiniExcel/OpenXml/ExcelOpenXmlSheetReader.cs b/src/MiniExcel/OpenXml/ExcelOpenXmlSheetReader.cs index e6d123c2..b6457c86 100644 --- a/src/MiniExcel/OpenXml/ExcelOpenXmlSheetReader.cs +++ b/src/MiniExcel/OpenXml/ExcelOpenXmlSheetReader.cs @@ -172,7 +172,11 @@ public static async Task CreateAsync(Stream stream, IMi maxColumnIndex = endColumnIndex.Value; } +#if NET10_0_OR_GREATER + using var sheetStream = await sheetEntry.OpenAsync(cancellationToken).ConfigureAwait(false); +#else using var sheetStream = sheetEntry.Open(); +#endif using var reader = XmlReader.Create(sheetStream, xmlSettings); if (!XmlReaderHelper.IsStartElement(reader, "worksheet", Ns)) @@ -491,7 +495,11 @@ private async Task SetSharedStringsAsync(CancellationToken cancellationToken = d return; var idx = 0; +#if NET10_0_OR_GREATER + using var stream = await sharedStringsEntry.OpenAsync(cancellationToken).ConfigureAwait(false); +#else using var stream = sharedStringsEntry.Open(); +#endif if (_config.EnableSharedStringCache && sharedStringsEntry.Length >= _config.SharedStringCacheSize) { SharedStrings = new SharedStringsDiskCache(); @@ -525,8 +533,13 @@ internal static async IAsyncEnumerable ReadWorkbookAsync(ReadOnlyCo true #endif ); - - using var stream = entries.Single(w => w.FullName == "xl/workbook.xml").Open(); + + var entry = entries.Single(w => w.FullName == "xl/workbook.xml"); +#if NET10_0_OR_GREATER + using var stream = await entry.OpenAsync(cancellationToken).ConfigureAwait(false); +#else + using var stream = entry.Open(); +#endif using var reader = XmlReader.Create(stream, xmlSettings); if (!XmlReaderHelper.IsStartElement(reader, "workbook", Ns)) @@ -616,7 +629,12 @@ await reader.SkipAsync() .CreateListAsync(cancellationToken) .ConfigureAwait(false); - using var stream = entries.Single(w => w.FullName == "xl/_rels/workbook.xml.rels").Open(); + var entry = entries.Single(w => w.FullName == "xl/_rels/workbook.xml.rels"); +#if NET10_0_OR_GREATER + using var stream = await entry.OpenAsync(cancellationToken).ConfigureAwait(false); +#else + using var stream = entry.Open(); +#endif using var reader = XmlReader.Create(stream, xmlSettings); if (!XmlReaderHelper.IsStartElement(reader, "Relationships", "http://schemas.openxmlformats.org/package/2006/relationships")) @@ -836,7 +854,11 @@ internal async Task> GetDimensionsAsync(CancellationToken canc var withoutCr = false; +#if NET10_0_OR_GREATER + using (var sheetStream = await sheet.OpenAsync(cancellationToken).ConfigureAwait(false)) +#else using (var sheetStream = sheet.Open()) +#endif using (var reader = XmlReader.Create(sheetStream, xmlSettings)) { while (await reader.ReadAsync().ConfigureAwait(false)) @@ -884,7 +906,11 @@ internal async Task> GetDimensionsAsync(CancellationToken canc if (withoutCr) { +#if NET10_0_OR_GREATER + using var sheetStream = await sheet.OpenAsync(cancellationToken).ConfigureAwait(false); +#else using var sheetStream = sheet.Open(); +#endif using var reader = XmlReader.Create(sheetStream, xmlSettings); if (!XmlReaderHelper.IsStartElement(reader, "worksheet", Ns)) @@ -978,7 +1004,11 @@ internal static async Task TryGetMaxRowColumnIndexAs bool withoutCr = false; int maxRowIndex = -1; int maxColumnIndex = -1; +#if NET10_0_OR_GREATER + using (var sheetStream = await sheetEntry.OpenAsync(cancellationToken).ConfigureAwait(false)) +#else using (var sheetStream = sheetEntry.Open()) +#endif using (var reader = XmlReader.Create(sheetStream, xmlSettings)) { while (await reader.ReadAsync() @@ -1028,7 +1058,11 @@ internal static async Task TryGetMaxRowColumnIndexAs if (withoutCr) { +#if NET10_0_OR_GREATER + using var sheetStream = await sheetEntry.OpenAsync(cancellationToken).ConfigureAwait(false); +#else using var sheetStream = sheetEntry.Open(); +#endif using var reader = XmlReader.Create(sheetStream, xmlSettings); if (!XmlReaderHelper.IsStartElement(reader, "worksheet", Ns)) @@ -1101,8 +1135,12 @@ internal static async Task TryGetMergeCellsAsync(ZipArchiveEntry sheetEntr #endif ); var mergeCells = new MergeCells(); - + +#if NET10_0_OR_GREATER + using var sheetStream = await sheetEntry.OpenAsync(cancellationToken).ConfigureAwait(false); +#else using var sheetStream = sheetEntry.Open(); +#endif using var reader = XmlReader.Create(sheetStream, xmlSettings); if (!XmlReaderHelper.IsStartElement(reader, "worksheet", Ns)) diff --git a/src/MiniExcel/OpenXml/ExcelOpenXmlSheetWriter.cs b/src/MiniExcel/OpenXml/ExcelOpenXmlSheetWriter.cs index 88a69802..a59daa33 100644 --- a/src/MiniExcel/OpenXml/ExcelOpenXmlSheetWriter.cs +++ b/src/MiniExcel/OpenXml/ExcelOpenXmlSheetWriter.cs @@ -78,7 +78,11 @@ public async Task SaveAsAsync(CancellationToken cancellationToken = defau } finally { +#if NET10_0_OR_GREATER + await _archive.DisposeAsync().ConfigureAwait(false); +#else _archive.Dispose(); +#endif } } @@ -156,7 +160,11 @@ public async Task InsertAsync(bool overwriteSheet = false, CancellationToke } finally { +#if NET10_0_OR_GREATER + await _archive.DisposeAsync().ConfigureAwait(false); +#else _archive.Dispose(); +#endif } } @@ -176,7 +184,11 @@ private async Task CreateSheetXmlAsync(object? values, string sheetPath, Ca var entry = _archive.CreateEntry(sheetPath, CompressionLevel.Fastest); var rowsWritten = 0; +#if NET10_0_OR_GREATER + using var zipStream = await entry.OpenAsync(cancellationToken).ConfigureAwait(false); +#else using var zipStream = entry.Open(); +#endif using var writer = new MiniExcelStreamWriter(zipStream, Utf8WithBom, _configuration.BufferSize); if (values is null) @@ -597,7 +609,11 @@ private async Task InsertContentTypesXmlAsync(CancellationToken cancellationToke } #if NET5_0_OR_GREATER #pragma warning disable CA2007 // Consider calling ConfigureAwait on the awaited task - await using var stream = contentTypesZipEntry.Open(); +#if NET10_0_OR_GREATER + await using var stream = await contentTypesZipEntry.OpenAsync(cancellationToken).ConfigureAwait(false); +#else + await using var stream = contentTypesZipEntry.Open(); +#endif #pragma warning restore CA2007 // Consider calling ConfigureAwait on the awaited task #else using var stream = contentTypesZipEntry.Open(); @@ -645,7 +661,11 @@ private async Task CreateZipEntryAsync(string path, string? contentType, string #if NET5_0_OR_GREATER #pragma warning disable CA2007 // Consider calling ConfigureAwait on the awaited task +#if NET10_0_OR_GREATER + await using (var zipStream = await entry.OpenAsync(cancellationToken).ConfigureAwait(false)) +#else await using (var zipStream = entry.Open()) +#endif #pragma warning restore CA2007 // Consider calling ConfigureAwait on the awaited task #else using (var zipStream = entry.Open()) @@ -666,7 +686,11 @@ private async Task CreateZipEntryAsync(string path, byte[] content, Cancellation #if NET5_0_OR_GREATER #pragma warning disable CA2007 // Consider calling ConfigureAwait on the awaited task +#if NET10_0_OR_GREATER + await using var zipStream = await entry.OpenAsync(cancellationToken).ConfigureAwait(false); +#else await using var zipStream = entry.Open(); +#endif await zipStream.WriteAsync(content, cancellationToken).ConfigureAwait(false); #pragma warning restore CA2007 // Consider calling ConfigureAwait on the awaited task #else diff --git a/src/MiniExcel/OpenXml/Styles/SheetStyleBuildContext.cs b/src/MiniExcel/OpenXml/Styles/SheetStyleBuildContext.cs index 6c4aa696..287faba5 100644 --- a/src/MiniExcel/OpenXml/Styles/SheetStyleBuildContext.cs +++ b/src/MiniExcel/OpenXml/Styles/SheetStyleBuildContext.cs @@ -101,12 +101,20 @@ public async Task InitializeAsync(SheetStyleElementInfos generateElementInfos, C _oldStyleXmlZipEntry = _archive.Mode == ZipArchiveMode.Update ? _archive.Entries.SingleOrDefault(s => s.FullName == ExcelFileNames.Styles) : null; if (_oldStyleXmlZipEntry is not null) { +#if NET10_0_OR_GREATER + using (var oldStyleXmlStream = await _oldStyleXmlZipEntry.OpenAsync(cancellationToken).ConfigureAwait(false)) +#else using (var oldStyleXmlStream = _oldStyleXmlZipEntry.Open()) +#endif { using var reader = XmlReader.Create(oldStyleXmlStream, new XmlReaderSettings { IgnoreWhitespace = true, Async = true }); OldElementInfos = await ReadSheetStyleElementInfosAsync(reader, cancellationToken).ConfigureAwait(false); } +#if NET10_0_OR_GREATER + _oldXmlReaderStream = await _oldStyleXmlZipEntry.OpenAsync(cancellationToken).ConfigureAwait(false); +#else _oldXmlReaderStream = _oldStyleXmlZipEntry.Open(); +#endif OldXmlReader = XmlReader.Create(_oldXmlReaderStream, new XmlReaderSettings { IgnoreWhitespace = true, Async = true }); _newStyleXmlZipEntry = _archive.CreateEntry(ExcelFileNames.Styles + ".temp", CompressionLevel.Fastest); @@ -120,7 +128,11 @@ public async Task InitializeAsync(SheetStyleElementInfos generateElementInfos, C _newStyleXmlZipEntry = _archive.CreateEntry(ExcelFileNames.Styles, CompressionLevel.Fastest); } +#if NET10_0_OR_GREATER + _newXmlWriterStream = await _newStyleXmlZipEntry.OpenAsync(cancellationToken).ConfigureAwait(false); +#else _newXmlWriterStream = _newStyleXmlZipEntry.Open(); +#endif NewXmlWriter = XmlWriter.Create(_newXmlWriterStream, new XmlWriterSettings { Indent = true, Encoding = _encoding, Async = true }); GenerateElementInfos = generateElementInfos; @@ -243,8 +255,16 @@ public async Task FinalizeAndUpdateZipDictionaryAsync(CancellationToken cancella _oldStyleXmlZipEntry = null; var finalStyleXmlZipEntry = _archive.CreateEntry(ExcelFileNames.Styles, CompressionLevel.Fastest); +#if NET10_0_OR_GREATER + using (var tempStream = await _newStyleXmlZipEntry.OpenAsync(cancellationToken).ConfigureAwait(false)) +#else using (var tempStream = _newStyleXmlZipEntry.Open()) +#endif +#if NET10_0_OR_GREATER + using (var newStream = await finalStyleXmlZipEntry.OpenAsync(cancellationToken).ConfigureAwait(false)) +#else using (var newStream = finalStyleXmlZipEntry.Open()) +#endif { await tempStream.CopyToAsync(newStream, 4096, cancellationToken).ConfigureAwait(false); } diff --git a/src/MiniExcel/Picture/MiniExcelPictureImplement.cs b/src/MiniExcel/Picture/MiniExcelPictureImplement.cs index f5031692..09934f79 100644 --- a/src/MiniExcel/Picture/MiniExcelPictureImplement.cs +++ b/src/MiniExcel/Picture/MiniExcelPictureImplement.cs @@ -145,8 +145,17 @@ public static async Task AddPictureAsync(Stream excelStream, CancellationToken c var imageName = $"image{Guid.NewGuid():N}.png"; var imagePath = $"xl/media/{imageName}"; var imageEntry = archive.CreateEntry(imagePath); - - using (var entryStream = imageEntry.Open()) + +#if NET10_0_OR_GREATER + using var entryStream = await imageEntry.OpenAsync(cancellationToken).ConfigureAwait(false); +#else + using var entryStream = imageEntry.Open(); +#endif +#if NET5_0_OR_GREATER + await entryStream.WriteAsync(imageBytes.AsMemory(), cancellationToken).ConfigureAwait(false); +#else + await entryStream.WriteAsync(imageBytes, 0, imageBytes.Length, cancellationToken).ConfigureAwait(false); +#endif { #pragma warning disable CA1835 await entryStream.WriteAsync(imageBytes, 0, imageBytes.Length, CancellationToken.None).ConfigureAwait(false); diff --git a/src/MiniExcel/SaveByTemplate/ExcelOpenXmlTemplate.MergeCells.cs b/src/MiniExcel/SaveByTemplate/ExcelOpenXmlTemplate.MergeCells.cs index 63b400ea..82e4cc8e 100644 --- a/src/MiniExcel/SaveByTemplate/ExcelOpenXmlTemplate.MergeCells.cs +++ b/src/MiniExcel/SaveByTemplate/ExcelOpenXmlTemplate.MergeCells.cs @@ -55,15 +55,27 @@ await stream.CopyToAsync(_outputFileStream _xMergeCellInfos = []; _newXMergeCellInfos = []; +#if NET10_0_OR_GREATER + var sheetStream = await sheet.OpenAsync(cancellationToken).ConfigureAwait(false); +#else var sheetStream = sheet.Open(); +#endif var fullName = sheet.FullName; var entry = archive.ZipFile.CreateEntry(fullName); +#if NET10_0_OR_GREATER + using var zipStream = await entry.OpenAsync(cancellationToken).ConfigureAwait(false); +#else using var zipStream = entry.Open(); +#endif await GenerateSheetXmlImplByUpdateModeAsync(sheet, zipStream, sheetStream, new Dictionary(), sharedStrings, mergeCells: true, cancellationToken).ConfigureAwait(false); //doc.Save(zipStream); //don't do it beacause: https://user-images.githubusercontent.com/12729184/114361127-61a5d100-9ba8-11eb-9bb9-34f076ee28a2.png } +#if NET10_0_OR_GREATER + await archive.ZipFile.DisposeAsync().ConfigureAwait(false); +#else archive.ZipFile.Dispose(); +#endif } } \ No newline at end of file diff --git a/src/MiniExcel/SaveByTemplate/ExcelOpenXmlTemplate.cs b/src/MiniExcel/SaveByTemplate/ExcelOpenXmlTemplate.cs index 667e3c3d..5fab5039 100644 --- a/src/MiniExcel/SaveByTemplate/ExcelOpenXmlTemplate.cs +++ b/src/MiniExcel/SaveByTemplate/ExcelOpenXmlTemplate.cs @@ -96,9 +96,18 @@ internal async Task SaveAsByTemplateImplAsync(Stream templateStream, object valu var newEntry = outputFileArchive.ZipFile.CreateEntry(entry.FullName); // Copy the content of the original entry to the new entry +#if NET10_0_OR_GREATER + using var originalEntryStream = await entry.OpenAsync(cancellationToken).ConfigureAwait(false); +#else using var originalEntryStream = entry.Open(); +#endif + // Copy the content of the original entry to the new entry +#if NET10_0_OR_GREATER + using var newEntryStream = await newEntry.OpenAsync(cancellationToken).ConfigureAwait(false); +#else using var newEntryStream = newEntry.Open(); - +#endif + await originalEntryStream.CopyToAsync(newEntryStream #if NETCOREAPP2_1_OR_GREATER , cancellationToken @@ -124,13 +133,21 @@ await originalEntryStream.CopyToAsync(newEntryStream _xMergeCellInfos = []; _newXMergeCellInfos = []; +#if NET10_0_OR_GREATER + var templateSheetStream = await templateSheet.OpenAsync(cancellationToken).ConfigureAwait(false); +#else var templateSheetStream = templateSheet.Open(); +#endif var templateFullName = templateSheet.FullName; var inputValues = _inputValueExtractor.ToValueDictionary(value); var outputZipEntry = outputFileArchive.ZipFile.CreateEntry(templateFullName); - + +#if NET10_0_OR_GREATER + using var outputZipSheetEntryStream = await outputZipEntry.OpenAsync(cancellationToken).ConfigureAwait(false); +#else using var outputZipSheetEntryStream = outputZipEntry.Open(); +#endif GenerateSheetXmlImplByCreateMode(templateSheet, outputZipSheetEntryStream, templateSheetStream, inputValues, templateSharedStrings, false); //doc.Save(zipStream); //don't do it because: https://user-images.githubusercontent.com/12729184/114361127-61a5d100-9ba8-11eb-9bb9-34f076ee28a2.png // disposing writer disposes streams as well. read and parse calc functions before that @@ -147,7 +164,11 @@ await originalEntryStream.CopyToAsync(newEntryStream //calcChain.Delete(); var calcChainEntry = outputFileArchive.ZipFile.CreateEntry(calcChainPathName); +#if NET10_0_OR_GREATER + using var calcChainStream = await calcChainEntry.OpenAsync(cancellationToken).ConfigureAwait(false); +#else using var calcChainStream = calcChainEntry.Open(); +#endif await CalcChainHelper.GenerateCalcChainSheetAsync(calcChainStream, _calcChainContent.ToString(), cancellationToken).ConfigureAwait(false); } else @@ -159,9 +180,17 @@ await originalEntryStream.CopyToAsync(newEntryStream var newEntry = outputFileArchive.ZipFile.CreateEntry(entry.FullName); // Copy the content of the original entry to the new entry +#if NET10_0_OR_GREATER + using var originalEntryStream = await entry.OpenAsync(cancellationToken).ConfigureAwait(false); +#else using var originalEntryStream = entry.Open(); +#endif +#if NET10_0_OR_GREATER + using var newEntryStream = await newEntry.OpenAsync(cancellationToken).ConfigureAwait(false); +#else using var newEntryStream = newEntry.Open(); - +#endif + await originalEntryStream.CopyToAsync(newEntryStream #if NETCOREAPP2_1_OR_GREATER , cancellationToken @@ -171,6 +200,10 @@ await originalEntryStream.CopyToAsync(newEntryStream } } +#if NET10_0_OR_GREATER + await outputFileArchive.ZipFile.DisposeAsync().ConfigureAwait(false); +#else outputFileArchive.ZipFile.Dispose(); +#endif } } \ No newline at end of file diff --git a/tests/MiniExcelTests/MiniExcelTests.csproj b/tests/MiniExcelTests/MiniExcelTests.csproj index 50838497..76ad1141 100644 --- a/tests/MiniExcelTests/MiniExcelTests.csproj +++ b/tests/MiniExcelTests/MiniExcelTests.csproj @@ -1,7 +1,7 @@  - net8.0 + net8.0;net10.0 enable enable From a0ce74e90349ccff285e44da44c3f182ea2baaca Mon Sep 17 00:00:00 2001 From: Victor Irzak Date: Sun, 29 Jun 2025 22:08:21 -0400 Subject: [PATCH 2/5] Revert test target framework because the file is locked --- tests/MiniExcelTests/MiniExcelTests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/MiniExcelTests/MiniExcelTests.csproj b/tests/MiniExcelTests/MiniExcelTests.csproj index 76ad1141..50838497 100644 --- a/tests/MiniExcelTests/MiniExcelTests.csproj +++ b/tests/MiniExcelTests/MiniExcelTests.csproj @@ -1,7 +1,7 @@  - net8.0;net10.0 + net8.0 enable enable From 5aa79eff3c2d3b0b66e7d107662f69b071a73780 Mon Sep 17 00:00:00 2001 From: Victor Irzak Date: Sun, 29 Jun 2025 22:19:28 -0400 Subject: [PATCH 3/5] Ensure codeql has .net 10 --- .github/workflows/codeql-analysis.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 361346e3..a15f3d2a 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -40,10 +40,12 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 - - name: Setup .NET 9 - uses: actions/setup-dotnet@v1 + - name: Setup .NET + uses: actions/setup-dotnet@v4 with: - dotnet-version: 9.0.x + dotnet-version: | + 8.0.x + 10.0.x # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL From 3100cfeeaf565c0cdf50d92fdf62403973915f88 Mon Sep 17 00:00:00 2001 From: Victor Irzak Date: Tue, 1 Jul 2025 09:58:18 -0400 Subject: [PATCH 4/5] Remove .NET Framework target 4.6.2, since it is already covered by .NET Standard 2.0 --- src/MiniExcel/MiniExcelLibs.csproj | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/MiniExcel/MiniExcelLibs.csproj b/src/MiniExcel/MiniExcelLibs.csproj index 917a9573..f7144b3a 100644 --- a/src/MiniExcel/MiniExcelLibs.csproj +++ b/src/MiniExcel/MiniExcelLibs.csproj @@ -1,10 +1,10 @@  - net462;netstandard2.0;net8.0;net10.0 + netstandard2.0;net8.0;net10.0 2.0.0-beta.1 enable - + 13 @@ -40,10 +40,7 @@ Todo : https://github.com/mini-software/MiniExcel/projects/1?fullscreen=trueREADME.md - - - - + From f8b49e464e5bed6d15b4ca192bd7d1f9646c97df Mon Sep 17 00:00:00 2001 From: Victor Irzak Date: Tue, 1 Jul 2025 21:09:55 -0400 Subject: [PATCH 5/5] Fix indentation --- src/MiniExcel/OpenXml/ExcelOpenXmlSheetReader.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/MiniExcel/OpenXml/ExcelOpenXmlSheetReader.cs b/src/MiniExcel/OpenXml/ExcelOpenXmlSheetReader.cs index b6457c86..6162554d 100644 --- a/src/MiniExcel/OpenXml/ExcelOpenXmlSheetReader.cs +++ b/src/MiniExcel/OpenXml/ExcelOpenXmlSheetReader.cs @@ -536,7 +536,7 @@ internal static async IAsyncEnumerable ReadWorkbookAsync(ReadOnlyCo var entry = entries.Single(w => w.FullName == "xl/workbook.xml"); #if NET10_0_OR_GREATER - using var stream = await entry.OpenAsync(cancellationToken).ConfigureAwait(false); + using var stream = await entry.OpenAsync(cancellationToken).ConfigureAwait(false); #else using var stream = entry.Open(); #endif @@ -631,7 +631,7 @@ await reader.SkipAsync() var entry = entries.Single(w => w.FullName == "xl/_rels/workbook.xml.rels"); #if NET10_0_OR_GREATER - using var stream = await entry.OpenAsync(cancellationToken).ConfigureAwait(false); + using var stream = await entry.OpenAsync(cancellationToken).ConfigureAwait(false); #else using var stream = entry.Open(); #endif