Pregunta

Tengo un par de columnas de datos en una hoja de Excel, que me tiene que importar a mi solicitud.

Puedo hacer esto utilizando -

string strConn;
OleDbDataAdapter oledaExcelInfo;

strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source = " + Server.MapPath(strSavePath + strRepFileName) + ";Extended Properties=\"Excel 8.0;HDR=NO;IMEX=1\"";
oledaExcelInfo = new OleDbDataAdapter("SELECT * FROM [Book1]", strConn);

dsetExcelInfo = new DataSet();            
oledaExcelInfo.Fill(dsetExcelInfo, "CCInfo");

Mientras que estos datos de importaciones con éxito, a veces los datos se importan incorrectamente es decir, a veces un 1234567 número podría ser importan como 1.23E+06

Esto se puede resolver si los datos en el archivo de Excel es '1234567 en lugar de 1234567 (se añade a la comilla simple)

Ahora estoy tratando de manipular los datos que voy a buscar desde el Excel de manera que antes de importar los datos que puedo añadir una programación ' a todos los valores para impedir la importación incorrecta.

Incluso trató de usar OleDbDataAdapter.Update pero supongo que esto no ayudará a que esto sucede después de que se importan los datos. ¿Es eso correcto?

¿Puedo manipular datos de modo que puedo importar los datos correctos? ¿Cómo puedo hacerlo?

¿Fue útil?

Solución

He utilizado el código abierto NPOI biblioteca para importar datos de Excel y conservar el formato de los datos a medida que estaba en la hoja de cálculo es decir 1234567 se importaría como 1234567 en lugar de importar los datos en un formato diferente, como 1.23E+06

En lugar de importar los datos como se muestra en la pregunta anterior, me importar datos usando la biblioteca NPOI -

using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;

HSSFWorkbook hssfworkbook;
using (FileStream file = new FileStream(Server.MapPath(strSavePath + strRepFileName), FileMode.Open, FileAccess.Read))
{
     hssfworkbook = new HSSFWorkbook(file);
}
Sheet sheet = hssfworkbook.GetSheet("Book1");

DataTable dt = new DataTable();    //Create datatable 
dt.Columns.Add();             //Add data columns

for (int count = 0; count <= sheet.LastRowNum; count++)
{
    DataRow dr = dt.NewRow();         //Create new data row

    //Based on the type of data being imported - get cell value accordingly    
    dr[0] = sheet.GetRow(count).GetCell(0).StringCellValue;   
    //dr[0] = sheet.GetRow(count).GetCell(0).NumericCellValue;
    //dr[0] = sheet.GetRow(count).GetCell(0).RichStringCellValue;
    //dr[0] = sheet.GetRow(count).GetCell(0).DateCellValue;
    //dr[0] = sheet.GetRow(count).GetCell(0).BooleanCellValue;

    dt.Rows.Add(dr);  //Add row to datatable
}

Otros consejos

Me acaba de recibir un problema similar (encontrar aquí: peculiar SELECT del archivo de Excel a través del método OleDbDataAdapter (C #) ).

Trate con la siguiente cadena de conexión, si desea utilizar solo marco .NET sin librerías externas:

string connString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\MyExcel.xls;Extended Properties=""Excel 8.0;HDR=No;IMEX=1"";";  

Parar el motor de JET a ACE lo hizo por mí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top