我正在使用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文件名。