diff --git a/src/MiniExcel.Core/OpenXml/Templates/OpenXmlTemplate.Impl.cs b/src/MiniExcel.Core/OpenXml/Templates/OpenXmlTemplate.Impl.cs index 6bb25e03..a8dfb58e 100644 --- a/src/MiniExcel.Core/OpenXml/Templates/OpenXmlTemplate.Impl.cs +++ b/src/MiniExcel.Core/OpenXml/Templates/OpenXmlTemplate.Impl.cs @@ -599,11 +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); - 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(); foreach (XmlElement c in notFirstRowElement.SelectNodes("x:c", Ns)) @@ -612,15 +608,14 @@ 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) { iEnumerableIndex++; rowXml.Clear() - .Append(cleanOuterXmlOpen) + .Append(outerXmlOpen) .AppendFormat(@" r=""{0}"">", newRowIndex) - .Append(cleanInnerXml) + .Append(innerXml) .Replace("{{$rowindex}}", newRowIndex.ToString()) .AppendFormat("", row.Name); @@ -795,7 +790,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 +799,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);