diff --git a/src/MiniExcel/Attributes/ExcelColumnAttribute.cs b/src/MiniExcel/Attributes/ExcelColumnAttribute.cs index cbcb519e..4dfcd51b 100644 --- a/src/MiniExcel/Attributes/ExcelColumnAttribute.cs +++ b/src/MiniExcel/Attributes/ExcelColumnAttribute.cs @@ -58,7 +58,7 @@ public class DynamicExcelColumn : ExcelColumnAttribute { public string Key { get; set; } - public Func CustomFormatter { get; set; } + public Func CustomFormatter { get; set; } public DynamicExcelColumn(string key) { diff --git a/src/MiniExcel/OpenXml/ExcelOpenXmlSheetWriter.Async.cs b/src/MiniExcel/OpenXml/ExcelOpenXmlSheetWriter.Async.cs index a4823bf2..9790fe5a 100644 --- a/src/MiniExcel/OpenXml/ExcelOpenXmlSheetWriter.Async.cs +++ b/src/MiniExcel/OpenXml/ExcelOpenXmlSheetWriter.Async.cs @@ -334,22 +334,11 @@ private async Task WriteCellAsync(MiniExcelAsyncStreamWriter writer, int rowInde return; } - var tuple = GetCellValue(rowIndex, cellIndex, value, p, valueIsNull); - - var styleIndex = tuple.Item1; - var dataType = tuple.Item2; - var cellValue = tuple.Item3; - var columnType = p.ExcelColumnType; - - /*Prefix and suffix blank space will lost after SaveAs #294*/ - var preserveSpace = cellValue != null && (cellValue.StartsWith(" ", StringComparison.Ordinal) || - cellValue.EndsWith(" ", StringComparison.Ordinal)); - if (p.CustomFormatter != null) { try { - cellValue = p.CustomFormatter(cellValue); + value = p.CustomFormatter(value); } catch { @@ -357,6 +346,17 @@ private async Task WriteCellAsync(MiniExcelAsyncStreamWriter writer, int rowInde } } + var tuple = GetCellValue(rowIndex, cellIndex, value, p, valueIsNull); + + var styleIndex = tuple.Item1; + var dataType = tuple.Item2; + var cellValue = tuple.Item3; + var columnType = p.ExcelColumnType; + + /*Prefix and suffix blank space will lost after SaveAs #294*/ + var preserveSpace = cellValue != null && (cellValue.StartsWith(" ", StringComparison.Ordinal) || + cellValue.EndsWith(" ", StringComparison.Ordinal)); + await writer.WriteAsync(WorksheetXml.Cell(columnReference, dataType, GetCellXfId(styleIndex), cellValue, preserveSpace: preserveSpace, columnType: columnType)); widthCollection?.AdjustWidth(cellIndex, cellValue); } diff --git a/src/MiniExcel/OpenXml/ExcelOpenXmlSheetWriter.cs b/src/MiniExcel/OpenXml/ExcelOpenXmlSheetWriter.cs index d533e335..96e16955 100644 --- a/src/MiniExcel/OpenXml/ExcelOpenXmlSheetWriter.cs +++ b/src/MiniExcel/OpenXml/ExcelOpenXmlSheetWriter.cs @@ -334,17 +334,11 @@ private void WriteCell(MiniExcelStreamWriter writer, int rowIndex, int cellIndex return; } - var tuple = GetCellValue(rowIndex, cellIndex, value, columnInfo, valueIsNull); - - var styleIndex = tuple.Item1; // https://learn.microsoft.com/en-us/dotnet/api/documentformat.openxml.spreadsheet.cell?view=openxml-3.0.1 - var dataType = tuple.Item2; // https://learn.microsoft.com/en-us/dotnet/api/documentformat.openxml.spreadsheet.cellvalues?view=openxml-3.0.1 - var cellValue = tuple.Item3; - if (columnInfo?.CustomFormatter != null) { try { - cellValue = columnInfo.CustomFormatter(cellValue); + value = columnInfo.CustomFormatter(value); } catch { @@ -352,6 +346,12 @@ private void WriteCell(MiniExcelStreamWriter writer, int rowIndex, int cellIndex } } + var tuple = GetCellValue(rowIndex, cellIndex, value, columnInfo, valueIsNull); + + var styleIndex = tuple.Item1; // https://learn.microsoft.com/en-us/dotnet/api/documentformat.openxml.spreadsheet.cell?view=openxml-3.0.1 + var dataType = tuple.Item2; // https://learn.microsoft.com/en-us/dotnet/api/documentformat.openxml.spreadsheet.cellvalues?view=openxml-3.0.1 + var cellValue = tuple.Item3; + var columnType = columnInfo?.ExcelColumnType ?? ColumnType.Value; /*Prefix and suffix blank space will lost after SaveAs #294*/ diff --git a/src/MiniExcel/Utils/CustomPropertyHelper.cs b/src/MiniExcel/Utils/CustomPropertyHelper.cs index 217f3e09..f0cef4a7 100644 --- a/src/MiniExcel/Utils/CustomPropertyHelper.cs +++ b/src/MiniExcel/Utils/CustomPropertyHelper.cs @@ -25,7 +25,7 @@ internal class ExcelColumnInfo public bool ExcelIgnore { get; internal set; } public int ExcelFormatId { get; internal set; } public ColumnType ExcelColumnType { get; internal set; } - public Func CustomFormatter { get; set; } + public Func CustomFormatter { get; set; } } internal class ExcellSheetInfo @@ -183,12 +183,9 @@ private static IEnumerable ConvertToExcelCustomPropertyInfo(Pro var excludeNullableType = gt ?? p.PropertyType; var excelFormat = p.GetAttribute()?.Format; var excelColumn = p.GetAttribute(); - if (configuration.DynamicColumns != null && configuration.DynamicColumns.Length > 0) - { - var dynamicColumn = configuration.DynamicColumns.SingleOrDefault(_ => _.Key == p.Name); - if (dynamicColumn != null) - excelColumn = dynamicColumn; - } + var dynamicColumn = configuration?.DynamicColumns?.SingleOrDefault(_ => _.Key == p.Name); + if (dynamicColumn != null) + excelColumn = dynamicColumn; var ignore = p.GetAttributeValue((ExcelIgnoreAttribute x) => x.ExcelIgnore) || p.GetAttributeValue((ExcelColumnAttribute x) => x.Ignore) || (excelColumn != null && excelColumn.Ignore); if (ignore) @@ -209,7 +206,8 @@ private static IEnumerable ConvertToExcelCustomPropertyInfo(Pro ExcelColumnWidth = p.GetAttribute()?.ExcelColumnWidth ?? excelColumn?.Width, ExcelFormat = excelFormat ?? excelColumn?.Format, ExcelFormatId = excelColumn?.FormatId ?? -1, - ExcelColumnType = excelColumn?.Type ?? ColumnType.Value + ExcelColumnType = excelColumn?.Type ?? ColumnType.Value, + CustomFormatter = dynamicColumn?.CustomFormatter }; }).Where(_ => _ != null); }