2013-11-20 30 views
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 
+5

Excel的內部存儲日期爲浮點數。沒有類型信息,只是控制含義的顯示格式。 –

+0

當然,我發佈了一篇關於OleDBDataAdapter如何確定列的數據類型的文章,儘管這是問題發生的地方。感謝您的洞察力。 – justsomeguy

回答