代码之家  ›  专栏  ›  技术社区  ›  Ryan Lundy

Excel通过OLEDB显示的数字不同…取决于电子表格是否打开?

  •  2
  • Ryan Lundy  · 技术社区  · 15 年前

    我正在使用OLEDB将Excel工作表打开到数据表中,如下所示:

    string select = string.Format("SELECT * FROM [{0}$]", worksheetName);
    using (var con = new OleDbConnection(connectionString))
    using (var adapter = new OleDbDataAdapter(select, con))
    {
        con.Open();
        var dt = new DataTable();
        adapter.Fill(dt);
        con.Close();
        return dt;
    }
    

    然后,我循环遍历datatable的行,读取各种数据位,如下所示:

    decimal charge;
    bool isChargeReadable = 
        decimal.TryParse(row["Charge"].ToString(), out charge);
    

    我刚刚发现,我的代码被“1100.00美元”这样的美元金额的单元格阻塞了,无法解析为十进制。这并不奇怪……只是这段代码之前工作得很好。

    进一步的调查显示如果我运行这个代码 当工作簿打开时 ,它将其中一个细胞视为“1100”。如果我在工作簿关闭时运行它,它会看到“1100.00美元”。

    为什么会这样?显然,在工作簿关闭时,我必须重新编写代码才能正常工作,但为什么这会产生影响?我本以为它只是在读保存的工作簿。

    我使用的连接字符串是…

    "Provider=Microsoft.Jet.OLEDB.4.0;
        Data Source={0};
        Extended Properties=""Excel 8.0;HDR=NO;IMEX=1"";"
    

    …其中{0}当然被替换为excel文件名。

    1 回复  |  直到 14 年前
        1
  •  0
  •   MAW74656    14 年前

    我发现在没有imex=数字集的情况下,我的oledb操作在excel中工作得更好。也许是你的问题?