2015-05-29 3 views
0

Когда я пытаюсь импортировать лист excel, он не извлекает некоторые целочисленные значения. Я использую DevExpress GridControl для экспорта данных из Grid. После экспорта I измените значение некоторой ячейки (имеющей пустое значение) на целое число, скажем 123, тогда при импорте не будет получено это целочисленное значение в DataTable.Данные не правильно заполняются в DataTable с использованием OleDbDataAdapter

Я разместил одну и ту же проблему в центре поддержки DevExpress «Export values in Improper Cell». Они сказали, что проблема связана с MSDN не их контролем. Пожалуйста, загрузите образец с указанной ссылки DevExpress & также смотрите видео, чтобы получить более подробную информацию.

Я использовал следующий код для импорта.

private System.Data.DataTable GetDataTableFromFile(string fileName) 
    { 
     string query = string.Empty; 
     //// string connectionString = "provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + fileName + "';Extended Properties=Excel 8.0;"; 
     string connectionStringV12 = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=Excel 12.0;"; 
     string connectionStringV4 = "Provider=Microsoft.Jet.OLEDB.4.0;Data source={0};Extended Properties=Excel 8.0;"; 
     System.Data.DataTable dataTable = new System.Data.DataTable(); 
     OleDbConnection obedbConnection = new OleDbConnection(string.Format(connectionStringV4, fileName)); 
     try 
     { 
      if (obedbConnection.State != ConnectionState.Open) 
      { 
       obedbConnection.Open(); 
      } 
     } 
     catch (Exception) 
     { 
      ////Diff. Connetion String 
      obedbConnection = new OleDbConnection(string.Format(connectionStringV12, fileName)); 
     } 

     ////Get First SheetName From Xls File 
     string sheetName = GetSheetNameFromFile(obedbConnection); 

     if (sheetName != null) 
     { 
      ////Query for Reading all Data from File 
      query = "select * from [" + sheetName + "]"; 
     } 

     if (!string.IsNullOrEmpty(query)) 
     { 
      OleDbDataAdapter data = new OleDbDataAdapter(query, obedbConnection); 
      data.Fill(dataTable); 
     } 
     return dataTable; 
    } 

    /// <summary> 
    /// Gets First SheetName of excel File 
    /// </summary> 
    /// <param name="con">Connection object.</param> 
    /// <returns>return sheet name.</returns> 
    private string GetSheetNameFromFile(OleDbConnection con) 
    { 
     try 
     { 
      if (con.State != ConnectionState.Open) 
      { 
       con.Open(); 
      } 
      var oledbTableSchema = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" }); 
      if (oledbTableSchema.Rows.Count > 0) 
      { 
       string sheetName = oledbTableSchema.Rows[0].ItemArray[2].ToString(); 
       if (string.IsNullOrEmpty(sheetName)) 
       { 
        throw new Exception("Sheet Not Found"); 

       } 
       return sheetName; 
      } 
      return string.Empty; 
     } 
     catch (Exception ex) 
     { 
      throw new Exception(ex.Message); 
     } 
    } 
} 

Итак, может ли кто-нибудь помочь мне решить эту проблему?

+0

Есть ли у вас проблемы в импорте или экспорт файлов –

+0

Проблема при импорте. –

+0

Я посоветовал вам импортировать файлы Excel с помощью dll ExcelReader. https://exceldatareader.codeplex.com/ –

ответ

0

Добавление IMEX = 1 свойство моей строки подключения, решение моей проблемы.

string connectionStringV4 = "Provider=Microsoft.Jet.OLEDB.4.0;Data source={0};Extended Properties=Excel 8.0;IMEX=1;"; 

Существует также аналогичное поведение сообщается в следующей теме

Not able to read integer in excel file consistantly

Для более детального ответа, пожалуйста, перейти к следующей ссылке:

Data not fills correctly in DataTable using OleDbDataAdapter

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

  • Нет связанных вопросов^_^