【问题标题】:how to keep the datetimeformat of excel.cell into dataset cell如何将 excel.cell 的日期时间格式保存到数据集单元格中
【发布时间】:2020-04-30 22:07:21
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

    标签: c# excel exceldatareader


    【解决方案1】:

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

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

    要解决此问题,您需要使用 ExcelDataReader 的较低级别阅读器 API 手动循环行/列,并使用第三方库 ExcelNumberFormat 来格式化值,例如 Excel。

    p>

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

    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);
    }
    

    【讨论】:

    • 感谢您的回答。我在他们的源代码上工作以添加自定义 dateTime 格式化程序,现在似乎可以完成这项工作。可能我也会研究 ExcelnumberFormat 库。但是,我要解决的另一个问题是我的解决方法,或者您的答案将 excel 值转换为字符串。最好不要丢失 Excel 文件中每个数据的详尽文化信息。请查看此链接以进行进一步讨论:stackoverflow.com/questions/61559823/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-27
    • 2017-07-03
    • 1970-01-01
    • 1970-01-01
    • 2014-09-29
    • 1970-01-01
    相关资源
    最近更新 更多