使用OpenXml将TimeSpan写入单元格而不使用CellValues.Date DataType

时间:2015-10-28 10:08:27

标签: c# excel openxml

我使用OpenXml在Excel中创建图表。该图显示了两个DateTime之间经过时间的TimeSpan。

我按照以下方式将经过的时间写入单元格

new Cell {DataType = new EnumValue<CellValues>(CellValues.Date), StyleIndex = 4, CellValue = new CellValue(ElapsedTime.ToString())}

其中StyleIndex = 4对应

cellFormats.AppendChild(new CellFormat {NumberFormatId = 21, ApplyNumberFormat = true, FontId = 2, ApplyFont = true});

然而,这会导致Excel 2007出现一些问题,因为它不支持日期时间。

我迄今为止找到的最佳解决方案是将其转换为DateTime的两倍,并将其写入单元格,但这看起来很难看,我宁愿保持我的小时/分钟格式

1 个答案:

答案 0 :(得分:0)

我设法通过将单元格写为数字​​单元格来解决此问题,因为可以使用数字单元格类型来编写日期。虽然它似乎不支持TimeSpans,但我通过将TimeSpan表示为DateTime并将TimeSpan添加到DateTime的MinValue来解决这个问题:

new Cell {DataType = new EnumValue<CellValues>(CellValues.Number), StyleIndex = 4, CellValue = new CellValue(DateTime.MinValue.Add(platformOccupancyRow.ElapsedTime).ToOADate().ToString(CultureInfo.CurrentCulture))}