Question

J'ai deux ou trois colonnes de données dans une feuille Excel que je dois à ma demande d'importation.

Je le faire en utilisant -

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");

Bien que ce succès importe des données, parfois les données sont importées incorrectement à savoir parfois un certain nombre 1234567 pourraient être importés en tant que 1.23E+06

Ceci peut être résolu si les données dans le fichier Excel est '1234567 au lieu de 1234567 (ajoutez la guillemet simple)

J'essaie maintenant de manipuler des données que je rapportez de l'Excel afin que avant d'importer les données que je peux append un programme ' à toutes les valeurs pour empêcher l'importation incorrecte.

J'ai même essayé d'utiliser OleDbDataAdapter.Update mais je suppose que cela ne contribue pas comme cela se produit après que les données sont importées. Est-ce exact?

Puis-je manipuler des données afin que j'importer les données correctes? Comment puis-je le faire?

Était-ce utile?

La solution

J'utilisé l'open source NPOI bibliothèque pour importer des données depuis Excel et préserver le format des données telles qu'elles était dans la feuille de diffusion par exemple 1234567 seraient importées comme 1234567 au lieu de l'importation de données dans un format différent comme 1.23E+06

Au lieu de l'importation de données comme indiqué dans la question ci-dessus, j'importer des données à l'aide de la bibliothèque 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
}

Autres conseils

Je viens d'avoir un problème similaire (trouver ici: Quirky SELECT à partir du fichier Excel via la méthode OleDbDataAdapter (C #) ).

Essayez la chaîne de connexion suivante, si vous souhaitez utiliser .NET sans cadre juste bibliothèques externes:

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

Mettre le moteur du JET à ACE a fait pour moi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top