c# - 如何将 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
}
可能这段代码并不接近现实,只是对需要做什么的疯狂猜测。
解决方案
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);
}
推荐阅读
- sql - 发布到 Azure 未创建所有 SQL 表
- gatsby - 在 gatsby 构建期间无法读取样式化组件的主题属性
- python - 训练,神经网络,但为什么 Model.add 不起作用?
- c# - 无法建立 HTTP/2 连接,因为服务器未完成 HTTP/2 握手
- go - 如何在 GORM 中处理递归关联
- jsf - Primefaces 3.4.1 不会在对话框中使用表单进行 POST
- excel - 如何搜索两个不同的范围并输入答案
- css - 如何在 Ant Design 中调整拖动行的高度?
- marklogic - 我可以将 mlDatabasesWithForestsOnOneHost 与副本一起使用吗?
- html - 让 div "zxing-frame" 适合视频部分而不是覆盖整个网页?