很难理解excel文件到.net对象类型(如DataSet或DataTable(之间的转换。
我在这个名为ExcelDataReader的第三方库中看到的一个问题(我相信这个问题在最近的版本中仍然存在(是它对日期时间格式的转换。
例如,用户设置的自定义格式为dd/mm/yyyy的excel文件在将excel文件导入对象后,在数据集的结果中转换为mm/dd/yyyy。
我想也许可以解决这个问题,库代码需要被动地接收excel单元格格式设置,而不是尝试用自己的设置进行转换。
想知道在代码中如何做到
if (excelfile.row[somenumber].cell.TypeSetting == typesetting.dateTime)
{
dataset.cell[somenumber].dateTimeFormatSetting = excelfile.row[somenumber].cell.dateTimeFormatSetting
}
这段代码可能不太现实,只是对需要做什么的胡乱猜测。
ExcelDataReader在使用AsDataSet()
时会丢失Excel的格式信息,基本上只提供原始值。
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);
}