2010-08-11 5 views
0

J'ai quelques colonnes de données dans une feuille Excel que je dois importer dans mon application.manipuler les données avant d'importer d'Excel à l'ensemble de données

Je le fais 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 ces données importe avec succès, parfois les données sont importées incorrectement-à-dire parfois un certain nombre 1234567 pourrait être importé comme 1.23E+06

Ceci peut être résolu si les données le fichier excel est '1234567 au lieu de 1234567 (ajouter le guillemet simple)

J'essaie maintenant de manipuler les données que je vais chercher dans l'excel afin que b Avant d'importer les données, je peux ajouter par programme un ' à toutes les valeurs pour empêcher l'importation incorrecte.

J'ai même essayé d'utiliser OleDbDataAdapter.Update mais je suppose que cela n'aidera pas car cela se produit après l'importation des données. Est-ce exact? Est-ce que je peux manipuler des données pour que j'importe les données correctes?

Comment puis-je le faire?

+0

Avez-vous essayé de définir le format des cellules au code postal, je sais que cela semble étrange, mais il semble être un moyen raisonnablement bon d'obtenir de longs nombres à travailler. (Code postal est un format spécial, vous devrez peut-être choisir l'anglais des États-Unis à partir du menu déroulant) – Fionnuala

+0

Merci, je vais essayer de le faire. Mais, L'application a déjà de nombreux utilisateurs, le réglage du format des cellules en code postal pourrait ne pas être possible. :(Je vais avoir à gérer ce problème par programme ou, puis-je formater les cellules avant d'importer à travers mon code? – pavanred

+0

Vous pouvez essayer :) ... Gamme ("B1: B2"). Sélectionnez ... Sélection .NumberFormat = "00000" – Fionnuala

Répondre

1

J'ai utilisé l'open source NPOI library pour importer des données à partir d'Excel et de préserver le format des données comme 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

lieu de l'importation de données comme indiqué dans la question ci-dessus, 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 
} 
0

Je viens de recevoir un problème similaire (trouver ici: Quirky SELECT from Excel file via OleDbDataAdapter method (C#)).

Essayez avec la chaîne de connexion suivante, si vous souhaitez simplement utiliser NET framework sans 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"";"; 

Commutation du moteur du JET à ACE, il a fait pour moi.

Questions connexes