2015-08-13 61 views
1

我正在使用EPPlus將數據從Excel選項卡導入到DataTable中。 Excel文件中的所有列都設置爲「常規」選項。我有很多列包含一個整數值(該列仍然設置爲「常規」,但所有的值都是類似整數的,即1,2,3等),但是當我導入到一個DataTable我得到像1.00,2.00,3.00等數值。導入Excel數據的EPPlus應爲Int

EPPlus是添加小數點和/或如何防止這種情況的原因嗎?

這是代碼,不會導入塊:

int startRow = headerRow + 1; 
    ExcelRange wsRow; 
    DataRow dr; 

    // if headerRow exists (headerRow > 0) then add columns with names 
    foreach (var firstRowCell in ws.Cells[headerRow, 1, headerRow, totalCols]) 
    { 
     dt.Columns.Add(headerRow > 0 ? firstRowCell.Text : string.Format("Column {0}", firstRowCell.Start.Column)); 
    } 


    for (int rowNum = startRow; rowNum <= totalRows; rowNum++) 
    { 
     wsRow = ws.Cells[rowNum, 1, rowNum, totalCols]; 
     dr = dt.NewRow(); 
     foreach (var cell in wsRow) 
     { 
      dr[cell.Start.Column - 1] = cell.Text; 
     } 

     dt.Rows.Add(dr); 
    } 
+0

您是否嘗試將DataTable中的列數據類型設置爲Int32? 'dt.Columns.Add(「Id」,typeof(Int32))'或者將它添加到DataRow時,將其轉換爲Int32。 'dr [cell.Start.Column - 1] = Convert.ToInt32(cell.Text)' –

回答

1

問題是Excel存儲所有的數字編號爲雙打,然後只是適用的格式。因此,當格式設置爲「常規」時,1.0將顯示爲1,因爲excel會將尾隨.0作爲其「解釋」刪除。您是否確定要使用cell.Text?或者你真的使用cell.Value這將解釋你所看到的。如果他們在excel中是真正的數字(不是數字作爲文本存儲),則在excel應用其「常規」樣式之後,.Text將返回.Value(例如,1.0將如何存儲1)的字符串(例如「1」 。因此,如果你確信它總是一個整數,你可以簡單地把.Value和強制轉換爲一個int或.Text和解析。如果你不那麼自信,那麼當你循環尋找缺乏模量時,你將不得不測試每個值。