From 77d5a281831316dc7672bda7acd2ad27d6a75229 Mon Sep 17 00:00:00 2001 From: Michele Bastione Date: Sat, 11 Apr 2026 19:41:15 +0200 Subject: [PATCH 1/2] Backporting style options to v1.x --- src/MiniExcel/OpenXml/OpenXmlStyleOptions.cs | 33 ++- .../Styles/DefaultSheetStyleBuilder.cs | 270 ++++++++++++++++-- .../Picture/MiniExcelPictureImplement.cs | 8 +- 3 files changed, 280 insertions(+), 31 deletions(-) diff --git a/src/MiniExcel/OpenXml/OpenXmlStyleOptions.cs b/src/MiniExcel/OpenXml/OpenXmlStyleOptions.cs index 225dde75..793525c7 100644 --- a/src/MiniExcel/OpenXml/OpenXmlStyleOptions.cs +++ b/src/MiniExcel/OpenXml/OpenXmlStyleOptions.cs @@ -1,7 +1,38 @@ +using System.Drawing; + namespace MiniExcelLibs.OpenXml { public class OpenXmlStyleOptions { + public OpenXmlHeaderStyle HeaderStyle { get; set; } public bool WrapCellContents { get; set; } + public HorizontalCellAlignment HorizontalAlignment { get; set; } + public VerticalCellAlignment VerticalAlignment { get; set; } } -} \ No newline at end of file + + public class OpenXmlHeaderStyle + { + /// + /// Whether to wrap the content of the header + /// + public bool WrapText { get; set; } + + /// + /// The RGB background color in the filtered state + /// + public Color BackgroundColor { get; set; } = Color.FromArgb(0x284472C4); + + /// + /// Horizontal alignment + /// + public HorizontalCellAlignment HorizontalAlignment { get; set; } = HorizontalCellAlignment.Left; + + /// + /// Vertical alignment + /// + public VerticalCellAlignment VerticalAlignment { get; set; } = VerticalCellAlignment.Bottom; + } + + public enum HorizontalCellAlignment { Left, Center, Right } + public enum VerticalCellAlignment { Bottom, Center, Top } +} diff --git a/src/MiniExcel/OpenXml/Styles/DefaultSheetStyleBuilder.cs b/src/MiniExcel/OpenXml/Styles/DefaultSheetStyleBuilder.cs index 793f1908..c098ded0 100644 --- a/src/MiniExcel/OpenXml/Styles/DefaultSheetStyleBuilder.cs +++ b/src/MiniExcel/OpenXml/Styles/DefaultSheetStyleBuilder.cs @@ -1,4 +1,5 @@ -using System.Threading.Tasks; +using System.Drawing; +using System.Threading.Tasks; namespace MiniExcelLibs.OpenXml.Styles { @@ -14,8 +15,12 @@ internal class DefaultSheetStyleBuilder : SheetStyleBuilderBase CellXfCount = 5 }; + private static readonly Color DefaultBackgroundColor = Color.FromArgb(0x284472C4); + private const HorizontalCellAlignment DefaultHorizontalAlignment = HorizontalCellAlignment.Left; + private const VerticalCellAlignment DefaultVerticalAlignment = VerticalCellAlignment.Bottom; + private readonly SheetStyleBuildContext _context; - private OpenXmlStyleOptions _styleOptions; + private readonly OpenXmlStyleOptions _styleOptions; public DefaultSheetStyleBuilder(SheetStyleBuildContext context, OpenXmlStyleOptions styleOptions) : base(context) { @@ -214,7 +219,11 @@ protected override void GenerateFill() _context.NewXmlWriter.WriteStartElement(_context.OldXmlReader.Prefix, "patternFill", _context.OldXmlReader.NamespaceURI); _context.NewXmlWriter.WriteAttributeString("patternType", "solid"); _context.NewXmlWriter.WriteStartElement(_context.OldXmlReader.Prefix, "fgColor", _context.OldXmlReader.NamespaceURI); - _context.NewXmlWriter.WriteAttributeString("rgb", "284472C4"); + + var bgColor = _styleOptions.HeaderStyle?.BackgroundColor ?? DefaultBackgroundColor; + var hexBgColor = $"{bgColor.A:X2}{bgColor.R:X2}{bgColor.G:X2}{bgColor.B:X2}"; + _context.NewXmlWriter.WriteAttributeString(null, "rgb", null, hexBgColor); + _context.NewXmlWriter.WriteEndElement(); _context.NewXmlWriter.WriteEndElement(); _context.NewXmlWriter.WriteEndElement(); @@ -255,7 +264,11 @@ protected override async Task GenerateFillAsync() await _context.NewXmlWriter.WriteStartElementAsync(_context.OldXmlReader.Prefix, "patternFill", _context.OldXmlReader.NamespaceURI); await _context.NewXmlWriter.WriteAttributeStringAsync(null, "patternType", null, "solid"); await _context.NewXmlWriter.WriteStartElementAsync(_context.OldXmlReader.Prefix, "fgColor", _context.OldXmlReader.NamespaceURI); - await _context.NewXmlWriter.WriteAttributeStringAsync(null, "rgb", null, "284472C4"); + + var bgColor = _styleOptions.HeaderStyle?.BackgroundColor ?? DefaultBackgroundColor; + var hexBgColor = $"{bgColor.A:X2}{bgColor.R:X2}{bgColor.G:X2}{bgColor.B:X2}"; + await _context.NewXmlWriter.WriteAttributeStringAsync(null, "rgb", null, hexBgColor).ConfigureAwait(false); + await _context.NewXmlWriter.WriteEndElementAsync(); await _context.NewXmlWriter.WriteEndElementAsync(); await _context.NewXmlWriter.WriteEndElementAsync(); @@ -640,17 +653,28 @@ protected override void GenerateCellXf() _context.NewXmlWriter.WriteAttributeString("applyBorder", "1"); _context.NewXmlWriter.WriteAttributeString("applyAlignment", "1"); _context.NewXmlWriter.WriteAttributeString("applyProtection", "1"); + _context.NewXmlWriter.WriteStartElement(_context.OldXmlReader.Prefix, "alignment", _context.OldXmlReader.NamespaceURI); - _context.NewXmlWriter.WriteAttributeString("horizontal", "left"); - _context.NewXmlWriter.WriteAttributeString("vertical", "bottom"); + + var horizontalAlignment = _styleOptions.HeaderStyle?.HorizontalAlignment ?? DefaultHorizontalAlignment; + var horizontalAlignmentStr = horizontalAlignment.ToString().ToLowerInvariant(); + _context.NewXmlWriter.WriteAttributeString(null, "horizontal", null, horizontalAlignmentStr); + + var verticalAlignment = _styleOptions.HeaderStyle?.VerticalAlignment ?? DefaultVerticalAlignment; + var verticalAlignmentStr = verticalAlignment.ToString().ToLowerInvariant(); + _context.NewXmlWriter.WriteAttributeString(null, "vertical", null, verticalAlignmentStr); + + var wrapHeader = (_styleOptions.HeaderStyle?.WrapText ?? false) ? "1" : "0"; + _context.NewXmlWriter.WriteAttributeString(null, "wrapText", null, wrapHeader); + _context.NewXmlWriter.WriteAttributeString("textRotation", "0"); - _context.NewXmlWriter.WriteAttributeString("wrapText", "0"); _context.NewXmlWriter.WriteAttributeString("indent", "0"); _context.NewXmlWriter.WriteAttributeString("relativeIndent", "0"); _context.NewXmlWriter.WriteAttributeString("justifyLastLine", "0"); _context.NewXmlWriter.WriteAttributeString("shrinkToFit", "0"); _context.NewXmlWriter.WriteAttributeString("readingOrder", "0"); _context.NewXmlWriter.WriteEndElement(); + _context.NewXmlWriter.WriteStartElement(_context.OldXmlReader.Prefix, "protection", _context.OldXmlReader.NamespaceURI); _context.NewXmlWriter.WriteAttributeString("locked", "1"); _context.NewXmlWriter.WriteAttributeString("hidden", "0"); @@ -674,11 +698,43 @@ protected override void GenerateCellXf() _context.NewXmlWriter.WriteAttributeString("applyBorder", "1"); _context.NewXmlWriter.WriteAttributeString("applyAlignment", "1"); _context.NewXmlWriter.WriteAttributeString("applyProtection", "1"); + _context.NewXmlWriter.WriteStartElement(_context.OldXmlReader.Prefix, "alignment", _context.OldXmlReader.NamespaceURI); - _context.NewXmlWriter.WriteAttributeString("horizontal", "general"); - _context.NewXmlWriter.WriteAttributeString("vertical", "bottom"); + string style1HorizontalAlignment; + switch (_styleOptions.HorizontalAlignment) + { + case HorizontalCellAlignment.Center: + style1HorizontalAlignment = "center"; + break; + case HorizontalCellAlignment.Right: + style1HorizontalAlignment = "right"; + break; + default: + style1HorizontalAlignment = "general"; + break; + } + + string style1VerticalAlignment; + switch (_styleOptions.VerticalAlignment) + { + case VerticalCellAlignment.Top: + style1VerticalAlignment = "top"; + break; + case VerticalCellAlignment.Center: + style1VerticalAlignment = "center"; + break; + default: + style1VerticalAlignment = "bottom"; + break; + } + + _context.NewXmlWriter.WriteAttributeString("horizontal", style1HorizontalAlignment); + _context.NewXmlWriter.WriteAttributeString("vertical", style1VerticalAlignment); _context.NewXmlWriter.WriteAttributeString("textRotation", "0"); - _context.NewXmlWriter.WriteAttributeString("wrapText", _styleOptions.WrapCellContents ? "1" : "0"); + + var wrapContent = _styleOptions.WrapCellContents ? "1" : "0"; + _context.NewXmlWriter.WriteAttributeString(null, "wrapText", null, wrapContent); + _context.NewXmlWriter.WriteAttributeString("indent", "0"); _context.NewXmlWriter.WriteAttributeString("relativeIndent", "0"); _context.NewXmlWriter.WriteAttributeString("justifyLastLine", "0"); @@ -708,10 +764,38 @@ protected override void GenerateCellXf() _context.NewXmlWriter.WriteAttributeString("applyBorder", "1"); _context.NewXmlWriter.WriteAttributeString("applyAlignment", "1"); _context.NewXmlWriter.WriteAttributeString("applyProtection", "1"); + _context.NewXmlWriter.WriteStartElement(_context.OldXmlReader.Prefix, "alignment", _context.OldXmlReader.NamespaceURI); - _context.NewXmlWriter.WriteAttributeString("horizontal", "general"); - _context.NewXmlWriter.WriteAttributeString("vertical", "bottom"); - _context.NewXmlWriter.WriteAttributeString("textRotation", "0"); + string style2HorizontalAlignment; + switch (_styleOptions.HorizontalAlignment) + { + case HorizontalCellAlignment.Center: + style2HorizontalAlignment = "center"; + break; + case HorizontalCellAlignment.Right: + style2HorizontalAlignment = "right"; + break; + default: + style2HorizontalAlignment = "general"; + break; + } + + string style2VerticalAlignment; + switch (_styleOptions.VerticalAlignment) + { + case VerticalCellAlignment.Top: + style2VerticalAlignment = "top"; + break; + case VerticalCellAlignment.Center: + style2VerticalAlignment = "center"; + break; + default: + style2VerticalAlignment = "bottom"; + break; + } + + _context.NewXmlWriter.WriteAttributeString("horizontal", style2HorizontalAlignment); + _context.NewXmlWriter.WriteAttributeString("vertical", style2VerticalAlignment); _context.NewXmlWriter.WriteAttributeString("textRotation", "0"); _context.NewXmlWriter.WriteAttributeString("wrapText", "0"); _context.NewXmlWriter.WriteAttributeString("indent", "0"); _context.NewXmlWriter.WriteAttributeString("relativeIndent", "0"); @@ -738,6 +822,7 @@ protected override void GenerateCellXf() _context.NewXmlWriter.WriteAttributeString("xfId", "0"); _context.NewXmlWriter.WriteAttributeString("applyBorder", "1"); _context.NewXmlWriter.WriteAttributeString("applyAlignment", "1"); + _context.NewXmlWriter.WriteStartElement(_context.OldXmlReader.Prefix, "alignment", _context.OldXmlReader.NamespaceURI); _context.NewXmlWriter.WriteAttributeString("horizontal", "fill"); _context.NewXmlWriter.WriteEndElement(); @@ -766,10 +851,38 @@ protected override void GenerateCellXf() _context.NewXmlWriter.WriteAttributeString("applyBorder", "1"); _context.NewXmlWriter.WriteAttributeString("applyAlignment", "1"); _context.NewXmlWriter.WriteAttributeString("applyProtection", "1"); + _context.NewXmlWriter.WriteStartElement(_context.OldXmlReader.Prefix, "alignment", _context.OldXmlReader.NamespaceURI); - _context.NewXmlWriter.WriteAttributeString("horizontal", "general"); - _context.NewXmlWriter.WriteAttributeString("vertical", "bottom"); - _context.NewXmlWriter.WriteAttributeString("textRotation", "0"); + string style3HorizontalAlignment; + switch (_styleOptions.HorizontalAlignment) + { + case HorizontalCellAlignment.Center: + style3HorizontalAlignment = "center"; + break; + case HorizontalCellAlignment.Right: + style3HorizontalAlignment = "right"; + break; + default: + style3HorizontalAlignment = "general"; + break; + } + + string style3VerticalAlignment; + switch (_styleOptions.VerticalAlignment) + { + case VerticalCellAlignment.Top: + style3VerticalAlignment = "top"; + break; + case VerticalCellAlignment.Center: + style3VerticalAlignment = "center"; + break; + default: + style3VerticalAlignment = "bottom"; + break; + } + + _context.NewXmlWriter.WriteAttributeString("horizontal", style3HorizontalAlignment); + _context.NewXmlWriter.WriteAttributeString("vertical", style3VerticalAlignment); _context.NewXmlWriter.WriteAttributeString("textRotation", "0"); _context.NewXmlWriter.WriteAttributeString("wrapText", "0"); _context.NewXmlWriter.WriteAttributeString("indent", "0"); _context.NewXmlWriter.WriteAttributeString("relativeIndent", "0"); @@ -777,6 +890,7 @@ protected override void GenerateCellXf() _context.NewXmlWriter.WriteAttributeString("shrinkToFit", "0"); _context.NewXmlWriter.WriteAttributeString("readingOrder", "0"); _context.NewXmlWriter.WriteEndElement(); + _context.NewXmlWriter.WriteStartElement(_context.OldXmlReader.Prefix, "protection", _context.OldXmlReader.NamespaceURI); _context.NewXmlWriter.WriteAttributeString("locked", "1"); _context.NewXmlWriter.WriteAttributeString("hidden", "0"); @@ -811,10 +925,19 @@ protected override async Task GenerateCellXfAsync() await _context.NewXmlWriter.WriteAttributeStringAsync(null, "applyAlignment", null, "1"); await _context.NewXmlWriter.WriteAttributeStringAsync(null, "applyProtection", null, "1"); await _context.NewXmlWriter.WriteStartElementAsync(_context.OldXmlReader.Prefix, "alignment", _context.OldXmlReader.NamespaceURI); - await _context.NewXmlWriter.WriteAttributeStringAsync(null, "horizontal", null, "left"); - await _context.NewXmlWriter.WriteAttributeStringAsync(null, "vertical", null, "bottom"); + + var horizontalAlignment = _styleOptions.HeaderStyle?.HorizontalAlignment ?? DefaultHorizontalAlignment; + var horizontalAlignmentStr = horizontalAlignment.ToString().ToLowerInvariant(); + await _context.NewXmlWriter.WriteAttributeStringAsync(null, "horizontal", null, horizontalAlignmentStr).ConfigureAwait(false); + + var verticalAlignment = _styleOptions.HeaderStyle?.VerticalAlignment ?? DefaultVerticalAlignment; + var verticalAlignmentStr = verticalAlignment.ToString().ToLowerInvariant(); + await _context.NewXmlWriter.WriteAttributeStringAsync(null, "vertical", null, verticalAlignmentStr).ConfigureAwait(false); + + var wrapHeader = (_styleOptions.HeaderStyle?.WrapText ?? false) ? "1" : "0"; + await _context.NewXmlWriter.WriteAttributeStringAsync(null, "wrapText", null, wrapHeader).ConfigureAwait(false); + await _context.NewXmlWriter.WriteAttributeStringAsync(null, "textRotation", null, "0"); - await _context.NewXmlWriter.WriteAttributeStringAsync(null, "wrapText", null, "0"); await _context.NewXmlWriter.WriteAttributeStringAsync(null, "indent", null, "0"); await _context.NewXmlWriter.WriteAttributeStringAsync(null, "relativeIndent", null, "0"); await _context.NewXmlWriter.WriteAttributeStringAsync(null, "justifyLastLine", null, "0"); @@ -844,11 +967,44 @@ protected override async Task GenerateCellXfAsync() await _context.NewXmlWriter.WriteAttributeStringAsync(null, "applyBorder", null, "1"); await _context.NewXmlWriter.WriteAttributeStringAsync(null, "applyAlignment", null, "1"); await _context.NewXmlWriter.WriteAttributeStringAsync(null, "applyProtection", null, "1"); + await _context.NewXmlWriter.WriteStartElementAsync(_context.OldXmlReader.Prefix, "alignment", _context.OldXmlReader.NamespaceURI); - await _context.NewXmlWriter.WriteAttributeStringAsync(null, "horizontal", null, "general"); - await _context.NewXmlWriter.WriteAttributeStringAsync(null, "vertical", null, "bottom"); + string style1HorizontalAlignment; + switch (_styleOptions.HorizontalAlignment) + { + case HorizontalCellAlignment.Center: + style1HorizontalAlignment = "center"; + break; + case HorizontalCellAlignment.Right: + style1HorizontalAlignment = "right"; + break; + default: + style1HorizontalAlignment = "general"; + break; + } + + string style1VerticalAlignment; + switch (_styleOptions.VerticalAlignment) + { + case VerticalCellAlignment.Top: + style1VerticalAlignment = "top"; + break; + case VerticalCellAlignment.Center: + style1VerticalAlignment = "center"; + break; + default: + style1VerticalAlignment = "bottom"; + break; + } + + _context.NewXmlWriter.WriteAttributeString("horizontal", style1HorizontalAlignment); + _context.NewXmlWriter.WriteAttributeString("vertical", style1VerticalAlignment); + await _context.NewXmlWriter.WriteAttributeStringAsync(null, "textRotation", null, "0"); - await _context.NewXmlWriter.WriteAttributeStringAsync(null, "wrapText", null, _styleOptions.WrapCellContents ? "1" : "0"); + + var wrapContent = _styleOptions.WrapCellContents ? "1" : "0"; + await _context.NewXmlWriter.WriteAttributeStringAsync(null, "wrapText", null, wrapContent).ConfigureAwait(false); + await _context.NewXmlWriter.WriteAttributeStringAsync(null, "indent", null, "0"); await _context.NewXmlWriter.WriteAttributeStringAsync(null, "relativeIndent", null, "0"); await _context.NewXmlWriter.WriteAttributeStringAsync(null, "justifyLastLine", null, "0"); @@ -878,9 +1034,39 @@ protected override async Task GenerateCellXfAsync() await _context.NewXmlWriter.WriteAttributeStringAsync(null, "applyBorder", null, "1"); await _context.NewXmlWriter.WriteAttributeStringAsync(null, "applyAlignment", null, "1"); await _context.NewXmlWriter.WriteAttributeStringAsync(null, "applyProtection", null, "1"); + await _context.NewXmlWriter.WriteStartElementAsync(_context.OldXmlReader.Prefix, "alignment", _context.OldXmlReader.NamespaceURI); - await _context.NewXmlWriter.WriteAttributeStringAsync(null, "horizontal", null, "general"); - await _context.NewXmlWriter.WriteAttributeStringAsync(null, "vertical", null, "bottom"); + string style2HorizontalAlignment; + switch (_styleOptions.HorizontalAlignment) + { + case HorizontalCellAlignment.Center: + style2HorizontalAlignment = "center"; + break; + case HorizontalCellAlignment.Right: + style2HorizontalAlignment = "right"; + break; + default: + style2HorizontalAlignment = "general"; + break; + } + + string style2VerticalAlignment; + switch (_styleOptions.VerticalAlignment) + { + case VerticalCellAlignment.Top: + style2VerticalAlignment = "top"; + break; + case VerticalCellAlignment.Center: + style2VerticalAlignment = "center"; + break; + default: + style2VerticalAlignment = "bottom"; + break; + } + + _context.NewXmlWriter.WriteAttributeString("horizontal", style2HorizontalAlignment); + _context.NewXmlWriter.WriteAttributeString("vertical", style2VerticalAlignment); + await _context.NewXmlWriter.WriteAttributeStringAsync(null, "textRotation", null, "0"); await _context.NewXmlWriter.WriteAttributeStringAsync(null, "wrapText", null, "0"); await _context.NewXmlWriter.WriteAttributeStringAsync(null, "indent", null, "0"); @@ -889,6 +1075,7 @@ protected override async Task GenerateCellXfAsync() await _context.NewXmlWriter.WriteAttributeStringAsync(null, "shrinkToFit", null, "0"); await _context.NewXmlWriter.WriteAttributeStringAsync(null, "readingOrder", null, "0"); await _context.NewXmlWriter.WriteEndElementAsync(); + await _context.NewXmlWriter.WriteStartElementAsync(_context.OldXmlReader.Prefix, "protection", _context.OldXmlReader.NamespaceURI); await _context.NewXmlWriter.WriteAttributeStringAsync(null, "locked", null, "1"); await _context.NewXmlWriter.WriteAttributeStringAsync(null, "hidden", null, "0"); @@ -936,9 +1123,39 @@ protected override async Task GenerateCellXfAsync() await _context.NewXmlWriter.WriteAttributeStringAsync(null, "applyBorder", null, "1"); await _context.NewXmlWriter.WriteAttributeStringAsync(null, "applyAlignment", null, "1"); await _context.NewXmlWriter.WriteAttributeStringAsync(null, "applyProtection", null, "1"); + await _context.NewXmlWriter.WriteStartElementAsync(_context.OldXmlReader.Prefix, "alignment", _context.OldXmlReader.NamespaceURI); - await _context.NewXmlWriter.WriteAttributeStringAsync(null, "horizontal", null, "general"); - await _context.NewXmlWriter.WriteAttributeStringAsync(null, "vertical", null, "bottom"); + string style3HorizontalAlignment; + switch (_styleOptions.HorizontalAlignment) + { + case HorizontalCellAlignment.Center: + style3HorizontalAlignment = "center"; + break; + case HorizontalCellAlignment.Right: + style3HorizontalAlignment = "right"; + break; + default: + style3HorizontalAlignment = "general"; + break; + } + + string style3VerticalAlignment; + switch (_styleOptions.VerticalAlignment) + { + case VerticalCellAlignment.Top: + style3VerticalAlignment = "top"; + break; + case VerticalCellAlignment.Center: + style3VerticalAlignment = "center"; + break; + default: + style3VerticalAlignment = "bottom"; + break; + } + + _context.NewXmlWriter.WriteAttributeString("horizontal", style3HorizontalAlignment); + _context.NewXmlWriter.WriteAttributeString("vertical", style3VerticalAlignment); + await _context.NewXmlWriter.WriteAttributeStringAsync(null, "textRotation", null, "0"); await _context.NewXmlWriter.WriteAttributeStringAsync(null, "wrapText", null, "0"); await _context.NewXmlWriter.WriteAttributeStringAsync(null, "indent", null, "0"); @@ -947,6 +1164,7 @@ protected override async Task GenerateCellXfAsync() await _context.NewXmlWriter.WriteAttributeStringAsync(null, "shrinkToFit", null, "0"); await _context.NewXmlWriter.WriteAttributeStringAsync(null, "readingOrder", null, "0"); await _context.NewXmlWriter.WriteEndElementAsync(); + await _context.NewXmlWriter.WriteStartElementAsync(_context.OldXmlReader.Prefix, "protection", _context.OldXmlReader.NamespaceURI); await _context.NewXmlWriter.WriteAttributeStringAsync(null, "locked", null, "1"); await _context.NewXmlWriter.WriteAttributeStringAsync(null, "hidden", null, "0"); diff --git a/src/MiniExcel/Picture/MiniExcelPictureImplement.cs b/src/MiniExcel/Picture/MiniExcelPictureImplement.cs index 85ea8e1e..ade710e6 100644 --- a/src/MiniExcel/Picture/MiniExcelPictureImplement.cs +++ b/src/MiniExcel/Picture/MiniExcelPictureImplement.cs @@ -231,10 +231,10 @@ private static string GetColumnName(int colIndex) } public static XmlDocument CreateOrUpdateDrawingXml( - XmlDocument existingDoc, - int col, int row, - int widthPx, int heightPx, - string relId) + XmlDocument existingDoc, + int col, int row, + int widthPx, int heightPx, + string relId) { var doc = existingDoc ?? new XmlDocument(); var ns = new XmlNamespaceManager(doc.NameTable); From 923a72cf48e9d29d5c8dcaea25357e728421254e Mon Sep 17 00:00:00 2001 From: Michele Bastione Date: Sat, 11 Apr 2026 20:14:29 +0200 Subject: [PATCH 2/2] Minor code fixes --- .../Styles/DefaultSheetStyleBuilder.cs | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/MiniExcel/OpenXml/Styles/DefaultSheetStyleBuilder.cs b/src/MiniExcel/OpenXml/Styles/DefaultSheetStyleBuilder.cs index c098ded0..eaa4dd54 100644 --- a/src/MiniExcel/OpenXml/Styles/DefaultSheetStyleBuilder.cs +++ b/src/MiniExcel/OpenXml/Styles/DefaultSheetStyleBuilder.cs @@ -795,7 +795,8 @@ protected override void GenerateCellXf() } _context.NewXmlWriter.WriteAttributeString("horizontal", style2HorizontalAlignment); - _context.NewXmlWriter.WriteAttributeString("vertical", style2VerticalAlignment); _context.NewXmlWriter.WriteAttributeString("textRotation", "0"); + _context.NewXmlWriter.WriteAttributeString("vertical", style2VerticalAlignment); + _context.NewXmlWriter.WriteAttributeString("textRotation", "0"); _context.NewXmlWriter.WriteAttributeString("wrapText", "0"); _context.NewXmlWriter.WriteAttributeString("indent", "0"); _context.NewXmlWriter.WriteAttributeString("relativeIndent", "0"); @@ -803,6 +804,7 @@ protected override void GenerateCellXf() _context.NewXmlWriter.WriteAttributeString("shrinkToFit", "0"); _context.NewXmlWriter.WriteAttributeString("readingOrder", "0"); _context.NewXmlWriter.WriteEndElement(); + _context.NewXmlWriter.WriteStartElement(_context.OldXmlReader.Prefix, "protection", _context.OldXmlReader.NamespaceURI); _context.NewXmlWriter.WriteAttributeString("locked", "1"); _context.NewXmlWriter.WriteAttributeString("hidden", "0"); @@ -882,7 +884,8 @@ protected override void GenerateCellXf() } _context.NewXmlWriter.WriteAttributeString("horizontal", style3HorizontalAlignment); - _context.NewXmlWriter.WriteAttributeString("vertical", style3VerticalAlignment); _context.NewXmlWriter.WriteAttributeString("textRotation", "0"); + _context.NewXmlWriter.WriteAttributeString("vertical", style3VerticalAlignment); + _context.NewXmlWriter.WriteAttributeString("textRotation", "0"); _context.NewXmlWriter.WriteAttributeString("wrapText", "0"); _context.NewXmlWriter.WriteAttributeString("indent", "0"); _context.NewXmlWriter.WriteAttributeString("relativeIndent", "0"); @@ -997,8 +1000,8 @@ protected override async Task GenerateCellXfAsync() break; } - _context.NewXmlWriter.WriteAttributeString("horizontal", style1HorizontalAlignment); - _context.NewXmlWriter.WriteAttributeString("vertical", style1VerticalAlignment); + await _context.NewXmlWriter.WriteAttributeStringAsync(null,"horizontal", null, style1HorizontalAlignment).ConfigureAwait(false); + await _context.NewXmlWriter.WriteAttributeStringAsync(null,"vertical", null, style1VerticalAlignment).ConfigureAwait(false); await _context.NewXmlWriter.WriteAttributeStringAsync(null, "textRotation", null, "0"); @@ -1064,8 +1067,8 @@ protected override async Task GenerateCellXfAsync() break; } - _context.NewXmlWriter.WriteAttributeString("horizontal", style2HorizontalAlignment); - _context.NewXmlWriter.WriteAttributeString("vertical", style2VerticalAlignment); + await _context.NewXmlWriter.WriteAttributeStringAsync(null, "horizontal", null, style2HorizontalAlignment); + await _context.NewXmlWriter.WriteAttributeStringAsync(null, "vertical", null, style2VerticalAlignment); await _context.NewXmlWriter.WriteAttributeStringAsync(null, "textRotation", null, "0"); await _context.NewXmlWriter.WriteAttributeStringAsync(null, "wrapText", null, "0"); @@ -1153,8 +1156,8 @@ protected override async Task GenerateCellXfAsync() break; } - _context.NewXmlWriter.WriteAttributeString("horizontal", style3HorizontalAlignment); - _context.NewXmlWriter.WriteAttributeString("vertical", style3VerticalAlignment); + await _context.NewXmlWriter.WriteAttributeStringAsync(null, "horizontal", null, style3HorizontalAlignment); + await _context.NewXmlWriter.WriteAttributeStringAsync(null, "vertical", null, style3VerticalAlignment); await _context.NewXmlWriter.WriteAttributeStringAsync(null, "textRotation", null, "0"); await _context.NewXmlWriter.WriteAttributeStringAsync(null, "wrapText", null, "0");