From 71277e49715472e77788e57c6ba6640b808d2092 Mon Sep 17 00:00:00 2001 From: Michele Bastione Date: Wed, 6 Aug 2025 22:59:20 +0200 Subject: [PATCH 1/2] Copies fix from PR 844 to the main branch Co-Authored-By: Ethan <31498924+ethanlin6@users.noreply.github.com> --- .../OpenXml/Templates/OpenXmlTemplate.Impl.cs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/MiniExcel.Core/OpenXml/Templates/OpenXmlTemplate.Impl.cs b/src/MiniExcel.Core/OpenXml/Templates/OpenXmlTemplate.Impl.cs index 6bb25e03..801a1645 100644 --- a/src/MiniExcel.Core/OpenXml/Templates/OpenXmlTemplate.Impl.cs +++ b/src/MiniExcel.Core/OpenXml/Templates/OpenXmlTemplate.Impl.cs @@ -602,7 +602,6 @@ private async Task GenerateCellValuesAsync(GenerateCe // Just need to remove space string one time https://github.com/mini-software/MiniExcel/issues/751 var cleanOuterXmlOpen = CleanXml(outerXmlOpen, endPrefix); - var cleanInnerXml = CleanXml(innerXml, endPrefix); // https://github.com/mini-software/MiniExcel/issues/771 Saving by template introduces unintended value replication in each row #771 var notFirstRowElement = rowElement.Clone(); @@ -612,7 +611,6 @@ private async Task GenerateCellValuesAsync(GenerateCe if (v is not null && !NonTemplateRegex.IsMatch(v.InnerText)) v.InnerText = string.Empty; } - var cleanNotFirstRowInnerXml = CleanXml(notFirstRowElement.InnerXml, endPrefix); foreach (var item in rowInfo.CellIEnumerableValues) { @@ -620,7 +618,7 @@ private async Task GenerateCellValuesAsync(GenerateCe rowXml.Clear() .Append(cleanOuterXmlOpen) .AppendFormat(@" r=""{0}"">", newRowIndex) - .Append(cleanInnerXml) + .Append(innerXml) .Replace("{{$rowindex}}", newRowIndex.ToString()) .AppendFormat("", row.Name); @@ -795,7 +793,7 @@ private async Task GenerateCellValuesAsync(GenerateCe if (isFirst) { // https://github.com/mini-software/MiniExcel/issues/771 Saving by template introduces unintended value replication in each row #771 - cleanInnerXml = cleanNotFirstRowInnerXml; + innerXml = notFirstRowElement.InnerXml; isFirst = false; } @@ -804,9 +802,9 @@ private async Task GenerateCellValuesAsync(GenerateCe // replace formulas ProcessFormulas(rowXml, newRowIndex); - await writer.WriteAsync(rowXml.ToString() + await writer.WriteAsync(CleanXml(rowXml, endPrefix).ToString() #if NET7_0_OR_GREATER - .AsMemory(), cancellationToken + .AsMemory(), cancellationToken #endif ).ConfigureAwait(false); From e393d8e20de783dbba95a599405a7284a0753794 Mon Sep 17 00:00:00 2001 From: Michele Bastione Date: Wed, 6 Aug 2025 23:23:43 +0200 Subject: [PATCH 2/2] Removing superfluous early call to CleanXml Co-Authored-By: Ethan <31498924+ethanlin6@users.noreply.github.com> --- .../OpenXml/Templates/OpenXmlTemplate.Impl.cs | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/MiniExcel.Core/OpenXml/Templates/OpenXmlTemplate.Impl.cs b/src/MiniExcel.Core/OpenXml/Templates/OpenXmlTemplate.Impl.cs index 801a1645..a8dfb58e 100644 --- a/src/MiniExcel.Core/OpenXml/Templates/OpenXmlTemplate.Impl.cs +++ b/src/MiniExcel.Core/OpenXml/Templates/OpenXmlTemplate.Impl.cs @@ -599,10 +599,7 @@ private async Task GenerateCellValuesAsync(GenerateCe var isFirst = generateCellValuesContext.isFirst; var iEnumerableIndex = generateCellValuesContext.iEnumerableIndex; var currentHeader = generateCellValuesContext.currentHeader; - - // Just need to remove space string one time https://github.com/mini-software/MiniExcel/issues/751 - var cleanOuterXmlOpen = CleanXml(outerXmlOpen, endPrefix); - + // https://github.com/mini-software/MiniExcel/issues/771 Saving by template introduces unintended value replication in each row #771 var notFirstRowElement = rowElement.Clone(); foreach (XmlElement c in notFirstRowElement.SelectNodes("x:c", Ns)) @@ -616,7 +613,7 @@ private async Task GenerateCellValuesAsync(GenerateCe { iEnumerableIndex++; rowXml.Clear() - .Append(cleanOuterXmlOpen) + .Append(outerXmlOpen) .AppendFormat(@" r=""{0}"">", newRowIndex) .Append(innerXml) .Replace("{{$rowindex}}", newRowIndex.ToString())