开发者

Excel through OleDb shows numbers differently...depending on whether spreadsheet is open?

开发者 https://www.devze.com 2022-12-16 05:50 出处:网络
I\'m opening an Excel worksheet into a DataTable using OleDb like this: string select = string.Format(\"SELECT * FROM [{0}$]\", worksheetName);

I'm opening an Excel worksheet into a DataTable using OleDb like this:

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;
}

Then I loop through the rows of the DataTable reading various bits of data like this:

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

I discovered just now that my code was choking on cells with dollar amounts such as "$1100.00", which it can't parse to decimal. Not so surprising...except that this开发者_如何学C is code that was working perfectly before just now.

Further investigation revealed that if I run this code while the workbook is open, it sees one of those cells as "1100". If I run it while the workbook is closed, it sees "$1100.00".

Why is this happening? Obviously I'll have to rework my code to function while the workbook is closed, but why would it make a difference? I would've thought it would just be reading the saved workbook.

The connection string I'm using is this...

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

...where {0} is replaced by the Excel file name, of course.


I've found that my oledb operations work better in excel withOUT an IMEX=number set. Perhaps your problem is there?

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号