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

我打开Excel工作表到一个使用OleDb DataTable像这样:

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”,它不能parsing为十进制数。 没有那么令人惊讶,只是这是刚刚完成工作的代码。

进一步的调查显示,如果我在工作簿打开的情况下运行此代码,则会将其中一个单元格视为“1100”。 如果我在工作簿closures时运行它,则会看到“$ 1100.00”。

为什么发生这种情况? 很明显,我将不得不重做我的代码才能在工作簿closures的情况下运行,但是为什么它会起作用呢? 我会认为这只是读取保存的工作簿。

我正在使用的连接string是…

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

…当然,{0}被Excel文件名取代。

我发现我的oledb操作在excel中工作得更好,没有IMEX =数字集。 也许你的问题在那里?