From 5f26a73ea9f0a3eb0d6f16e61904565ec547be61 Mon Sep 17 00:00:00 2001 From: Michele Bastione Date: Sat, 13 Sep 2025 21:16:57 +0200 Subject: [PATCH 1/2] Fixes issue 876 on the maintenance branch --- .../ExcelOpenXmlSheetWriter.DefaultOpenXml.cs | 3 +++ tests/MiniExcelTests/MiniExcelIssueTests.cs | 20 +++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/src/MiniExcel/OpenXml/ExcelOpenXmlSheetWriter.DefaultOpenXml.cs b/src/MiniExcel/OpenXml/ExcelOpenXmlSheetWriter.DefaultOpenXml.cs index 5f887da6..40bff72a 100644 --- a/src/MiniExcel/OpenXml/ExcelOpenXmlSheetWriter.DefaultOpenXml.cs +++ b/src/MiniExcel/OpenXml/ExcelOpenXmlSheetWriter.DefaultOpenXml.cs @@ -26,6 +26,9 @@ private IEnumerable> GetSheets() { foreach (var sheet in dictionary) { + if (sheet.Key.Length > 31) + throw new ArgumentException("Sheet names must be less than 31 characters"); + sheetId++; var sheetInfos = GetSheetInfos(sheet.Key); yield return Tuple.Create(sheetInfos.ToDto(sheetId), sheet.Value); diff --git a/tests/MiniExcelTests/MiniExcelIssueTests.cs b/tests/MiniExcelTests/MiniExcelIssueTests.cs index c49c32f5..a4be971d 100644 --- a/tests/MiniExcelTests/MiniExcelIssueTests.cs +++ b/tests/MiniExcelTests/MiniExcelIssueTests.cs @@ -4699,4 +4699,24 @@ public void TestIssue869(string fileName, DateOnlyConversionMode mode, bool thro } } } + + [Fact] + public void TestIssue876() + { + var someTable = new[] + { + new { Name = "Jack", Age = 25 }, + }; + + var sheets = new Dictionary + { + ["SomeVeryLongNameWithMoreThan31Characters"] = someTable + }; + + Assert.Throws(() => + { + using var outputPath = AutoDeletingPath.Create(); + MiniExcel.SaveAs(outputPath.ToString(), sheets); + }); + } } \ No newline at end of file From 3c9f8af00ab4d8be8715bd5178a49664da25190d Mon Sep 17 00:00:00 2001 From: Michele Bastione Date: Sat, 13 Sep 2025 21:29:39 +0200 Subject: [PATCH 2/2] Moved check for sheet name length after the GetSheetInfos call Signed-off-by: Michele Bastione --- .../OpenXml/ExcelOpenXmlSheetWriter.DefaultOpenXml.cs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/MiniExcel/OpenXml/ExcelOpenXmlSheetWriter.DefaultOpenXml.cs b/src/MiniExcel/OpenXml/ExcelOpenXmlSheetWriter.DefaultOpenXml.cs index 40bff72a..639c50e2 100644 --- a/src/MiniExcel/OpenXml/ExcelOpenXmlSheetWriter.DefaultOpenXml.cs +++ b/src/MiniExcel/OpenXml/ExcelOpenXmlSheetWriter.DefaultOpenXml.cs @@ -26,11 +26,11 @@ private IEnumerable> GetSheets() { foreach (var sheet in dictionary) { - if (sheet.Key.Length > 31) - throw new ArgumentException("Sheet names must be less than 31 characters"); - sheetId++; var sheetInfos = GetSheetInfos(sheet.Key); + if (sheetInfos.ExcelSheetName.Length > 31) + throw new ArgumentException("Sheet names must be less than 31 characters"); + yield return Tuple.Create(sheetInfos.ToDto(sheetId), sheet.Value); } @@ -427,3 +427,4 @@ private string GetCellXfId(string styleIndex) } } } +