【问题标题】:Excel returns dates instead of computed valueExcel 返回日期而不是计算值
【发布时间】:2013-11-21 02:46:58
【问题描述】:

所以我有一个 excel 导入器,它从 excel 工作表中获取数据并填充一个 DataTable,然后我将它插入到一个 SQL 表中。我已经将它用于数千次导入,但对于这个工作表,它不会从工作表中提取正确的单元格值。当单元格实际包含“$4.32”并且单元格标题值为“每单位价格”时返回空值,我的函数将返回类似“1/4/1900 7:42:25AM”的值。单元格的公式类似于“=(J9*(1-K9)*(1-M9))”。整个列的格式为“货币”。

我不知道发生了什么,因此感谢任何见解。

获取excel工作表的代码->DataTable:

DataTable dt;
        try
        {
            if (FileInUse(filename))
            {
                e.Result = false;
                Core.ShowExclamation("The file is already open. Please save and close the file before continuing.");
                return;
            }

            OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filename + @";Extended Properties=""Excel 12.0;HDR=NO;""");
            string sheet = GetExcelSheetNames(con)[0];

            OleDbDataAdapter da = new OleDbDataAdapter("select * from [" + sheet + "]", con);
            dt = new DataTable();
            da.Fill(dt);
        }

返回一些值的代码:

            string foo = dt.Rows[5][13].ToString() + "\r\n";
            foo += dt.Rows[6][13].ToString() + "\r\n";
            foo += dt.Rows[7][13].ToString() + "\r\n";
            foo += dt.Rows[8][13].ToString() + "\r\n";
            foo += dt.Rows[9][13].ToString() + "\r\n";
            foo += dt.Rows[10][13].ToString();
            Core.ShowInfo(foo);

Returns:                                        Should Returns:
12/30/1899 12:00:00 AM                          0.00%
9/27/2013 12:00:00 AM                           9/27/2013
{}                                              Reseller Price Per Unit
1/4/1900 7:42:25 AM                             $4.32
1/4/1900 7:42:25 AM                             $4.32
3/10/1901 10:23:42 AM                           $435.43

【问题讨论】:

  • Excel 在内部将日期存储为浮点数。没有类型信息,只有控制含义的显示格式。
  • 当然,我发布了一篇关于 OleDBDataAdapter 如何确定列的数据类型的文章,而这正是问题所在。感谢您的洞察力。

标签: c# excel


【解决方案1】:

终于从 Øyvind Knobloch-Bråthen 提出的问题中找到了这篇文章

http://neosblogs.blogspot.com/2008/06/how-jet-ole-db-decide-excel-column-type.html

修复:

OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filename + @";Extended Properties=""Excel 12.0;HDR=NO;IMEX=1""");

只需设置“IMEX=1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-21
    • 1970-01-01
    • 2018-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多