首页 > 解决方案 > 如何将 excel.cell 的日期时间格式保存到数据集单元格中

问题描述

很难理解 excel 文件到 .net 对象类型(如 DataSet 或 DataTable)之间的转换。

我在这个名为ExcelDataReader的第 3 方库中看到的一个问题(我相信这个问题仍然存在于最新版本中) 是它对日期时间格式的转换。

例如,在将 excel 文件导入完成的对象后,用户设置自定义格式 dd/mm/yyyy 的 excel 文件在 dataSet 的结果中转换为 mm/dd/yyyy。

我在想也许可以解决这个问题,库代码需要被动接收 excel 单元格格式设置,而不是尝试使用自己的设置进行转换。

想知道如何在代码中做到这一点

if (excelfile.row[somenumber].cell.TypeSetting == typesetting.dateTime)
{ 
   dataset.cell[somenumber].dateTimeFormatSetting = excelfile.row[somenumber].cell.dateTimeFormatSetting
}

可能这段代码并不接近现实,只是对需要做什么的疯狂猜测。

标签: c#excelexceldatareader

解决方案


ExcelDataReader 在使用时会丢失 Excel 的格式信息AsDataSet(),这基本上只为您提供原始值。

F.ex 单独的原始日期对象不知道它应该显示为“mm-dd-yy”还是“dd/mm/yy”。为此,您需要被忽略的“数字格式字符串” AsDataSet()

要解决此问题AsDataSet(),您需要使用 ExcelDataReader 的较低级别读取器 API 手动循环行/列,并使用第三方库ExcelNumberFormat来格式化 Excel 等值,而不是调用 。

他们自述文件中的相关片段显示了如何格式化读取器对象中的单个值:

string GetFormattedValue(IExcelDataReader reader, int columnIndex, CultureInfo culture)
{
    var value = reader.GetValue(columnIndex);
    var formatString = reader.GetNumberFormatString(columnIndex);
    if (formatString != null)
    {
        var format = new NumberFormat(formatString);
        return format.Format(value, culture);
    }
    return Convert.ToString(value, culture);
}

推荐阅读