2015-08-13 1 views
1

Я использую EPPlus для импорта данных со вкладки Excel в DataTable. Все столбцы в файле Excel имеют значение «Общий».EPPlus импорт данных Excel должен быть Int

У меня есть несколько столбцов, которые содержат целочисленное значение (столбец по-прежнему установлен в «Общие», но все значения являются целыми, то есть 1, 2, 3 и т. Д.), Но когда я импортирую в DataTable Я получаю значения, такие как 1.00, 2.00, 3.00 и т. Д.

Есть ли причина, по которой 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 (не номера хранятся как текст), то .Text вернет представление строки (например, «1») .Value (например, 1.0, которое будет сохранено 1) после того, как Excel применит свой стиль «Общие», ,

Итак, если вы уверены, что это всегда будет int, вы можете просто взять значение .Value и применить к int или .Text и parse. Если вы не уверены в себе, вам придется проверять каждое значение, как вы петля и искать недостаток модуля.

Смежные вопросы