3
因此,我有一個excel導入器,它從Excel工作表中取得數據並填充DataTable,然後將其插入到SQL表中。我已經使用它來處理數千個導入,但是對於這個工作表,它不會從工作表中拉出正確的單元格值。當單元格實際包含「$ 4.32」時,我的函數返回一個類似「1/4/1900 7:42:25 AM」的值,並返回一個單元標題值「每單元價格」爲空的值。單元的公式類似於「=(J9 *(1-K9)*(1-M9))」。整列被格式化爲「貨幣」。Excel返回日期而不是計算值
我不知道發生了什麼,所以任何洞察力的讚賞。
代碼即可獲得Excel工作表 - >數據表:
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如何確定列的數據類型的文章,儘管這是問題發生的地方。感謝您的洞察力。 – justsomeguy