我现在正在为工作编写大量 Extract Transform Load 代码。为了更容易从 SSIS 中读取用户生成的 Excel 电子表格中的数据,我编写了一个小库,它从 Excel 文件中读取列标题布局,并将数据转储到 MS SQL 数据库中的表中,该数据库具有与 Excel 文件相同的架构。到目前为止它运行良好,但我遇到了一些奇怪的问题。
(是的,我知道 SSIS 本身就支持这样的东西。我选择的方法有技术原因,解释它们超出了本文的范围。)
问题是对于某些输入文件,任何包含日期信息的列都会被破坏。例如,当我执行导入时,日期字符串 12/09/2013
被破坏为 41617
; 2013 年 12 月 9 日上午 9:19:58
变为 41617.388866
。我正在检查它是否试图将 12/09/2013
视为数学方程式,但 (12/09)/2013 = 6.62361
。此外,我还检查了此电子表格以及其他一些导入日期字段时没有错误的单元格格式,到处都是一样的 - 自定义、mm/dd/yyyy。
这里最大的问题是,由于我编写的过程的性质,一切都取决于我不知道运行时文件的结构。我可以即时转换数据,但我不知道如何从 41617
倒退到 12/09/2013
。
DateTime.TryParse 也无济于事:
DateTime dt;
DateTime.TryParse("41617", out dt);
Console.WriteLine(dt.ToString());
输出
1/1/0001 12:00:00 AM
这是我遇到问题的电子表格的剥离、去标识化副本的链接:View / Download from Google Drive
我正在使用 OLE DB 连接字符串从 Excel (2007) 文件中读取数据:
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FilePath + ";Extended Properties = \"Excel 12.0 XML; HDR=YES; IMEX=1\";"
使用 Interop 类不是一种选择。它们未在服务器上设置,作为承包商,我不太可能让 IT 部门进行设置。
然后,我使用一个 OleDbCommand()
,它只针对 Excel 工作表运行 SELECT *
,并用结果填充数据集。
这让我非常难过,如果有任何帮助,我将不胜感激。
最佳答案
尝试使用
DateTime.FromOADate(value)
关于c# - .NET DataTable 正在处理 Excel 文件中的日期字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20972085/