diff --git a/src/MiniExcel.OpenXml/Styles/Builder/DefaultSheetStyleBuilder.cs b/src/MiniExcel.OpenXml/Styles/Builder/DefaultSheetStyleBuilder.cs index aa6f6073..d5b368b0 100644 --- a/src/MiniExcel.OpenXml/Styles/Builder/DefaultSheetStyleBuilder.cs +++ b/src/MiniExcel.OpenXml/Styles/Builder/DefaultSheetStyleBuilder.cs @@ -496,13 +496,13 @@ protected override async Task GenerateCellXfAsync() await NewWriter.WriteEndElementAsync().ConfigureAwait(false); /* - * + * * * */ await NewWriter.WriteStartElementAsync(OldReader.Prefix, "xf", OldReader.NamespaceURI).ConfigureAwait(false); - await NewWriter.WriteAttributeStringAsync(null, "numFmtId", null, "21").ConfigureAwait(false); + await NewWriter.WriteAttributeStringAsync(null, "numFmtId", null, "46").ConfigureAwait(false); await NewWriter.WriteAttributeStringAsync(null, "fontId", null, $"{Context.OldElementInfos.FontCount}").ConfigureAwait(false); await NewWriter.WriteAttributeStringAsync(null, "fillId", null, $"{Context.OldElementInfos.FillCount}").ConfigureAwait(false); await NewWriter.WriteAttributeStringAsync(null, "borderId", null, $"{Context.OldElementInfos.BorderCount + 1}").ConfigureAwait(false); diff --git a/src/MiniExcel.OpenXml/Styles/Builder/MinimalSheetStyleBuilder.cs b/src/MiniExcel.OpenXml/Styles/Builder/MinimalSheetStyleBuilder.cs index 7afce315..68f58ca3 100644 --- a/src/MiniExcel.OpenXml/Styles/Builder/MinimalSheetStyleBuilder.cs +++ b/src/MiniExcel.OpenXml/Styles/Builder/MinimalSheetStyleBuilder.cs @@ -85,7 +85,7 @@ protected override async Task GenerateCellXfAsync() * * * - * + * * */ for (int i = 0; i < 3; i++) @@ -115,7 +115,7 @@ protected override async Task GenerateCellXfAsync() await NewWriter.WriteAttributeStringAsync(null, "xfId", null, "0").ConfigureAwait(false); await NewWriter.WriteEndElementAsync().ConfigureAwait(false); await NewWriter.WriteStartElementAsync(OldReader.Prefix, "xf", OldReader.NamespaceURI).ConfigureAwait(false); - await NewWriter.WriteAttributeStringAsync(null, "numFmtId", null, "21").ConfigureAwait(false); + await NewWriter.WriteAttributeStringAsync(null, "numFmtId", null, "46").ConfigureAwait(false); await NewWriter.WriteAttributeStringAsync(null, "applyNumberFormat", null, "1").ConfigureAwait(false); await NewWriter.WriteEndElementAsync().ConfigureAwait(false); diff --git a/src/MiniExcel.OpenXml/Writer/OpenXmlWriter.XmlGeneration.cs b/src/MiniExcel.OpenXml/Writer/OpenXmlWriter.XmlGeneration.cs index 29e3aa00..5ba35110 100644 --- a/src/MiniExcel.OpenXml/Writer/OpenXmlWriter.XmlGeneration.cs +++ b/src/MiniExcel.OpenXml/Writer/OpenXmlWriter.XmlGeneration.cs @@ -11,8 +11,6 @@ internal partial class OpenXmlWriter private const string FillCellStyleIndex = "4"; private const string TimeCellStyleIndex = "5"; - private static readonly DateTime ExcelZeroDate = new(1899, 12, 31); - private readonly Dictionary _zipContentsMap = []; private readonly Dictionary _sharedStrings = []; @@ -357,9 +355,6 @@ private static double CorrectDateTimeValue(DateTime value) private (string, string, string) GetTimeSpanValue(TimeSpan value, MiniExcelColumnMapping? columnMapping) { - if (value.TotalDays >= 1) - return GetDateTimeValue(ExcelZeroDate + value, columnMapping); - var cellValue = value.TotalDays.ToString(CultureInfo.InvariantCulture); var format = columnMapping?.ExcelFormatId is { } fmt and not -1 ? fmt.ToString() : TimeCellStyleIndex; diff --git a/tests/MiniExcel.OpenXml.Tests/Main/MiniExcelOpenXmlExporterTests.cs b/tests/MiniExcel.OpenXml.Tests/Main/MiniExcelOpenXmlExporterTests.cs index ff693907..fdca47e6 100644 --- a/tests/MiniExcel.OpenXml.Tests/Main/MiniExcelOpenXmlExporterTests.cs +++ b/tests/MiniExcel.OpenXml.Tests/Main/MiniExcelOpenXmlExporterTests.cs @@ -17,6 +17,16 @@ static MiniExcelOpenXmlExporterTests() ExcelPackage.LicenseContext = LicenseContext.NonCommercial; } + [Fact] + public void TimeSpanOfADayOrMoreStaysADuration() + { + using var path = AutoDeletingPath.Create(); + _excelExporter.Export(path.ToString(), new[] { new { Duration = TimeSpan.FromHours(36.25) } }); + + var row = _excelImporter.Query(path.ToString(), true).First(); + Assert.Equal(TimeSpan.FromHours(36.25), (TimeSpan)row.Duration); + } + [Fact] public void SaveAsControlChracter() {