Domanda

Ho un paio di colonne di dati in un foglio di Excel, che devo importare alla mia richiesta.

I farlo usando -

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

Mentre questi dati importa con successo, a volte i dati vengono importati in modo non corretto vale a dire di un numero di 1234567 potevano essere importati come 1.23E+06

Questo può essere risolto se i dati nel file di Excel è '1234567 invece di 1234567 (aggiungere le virgolette singole)

Ora sto cercando di manipolare i dati che vado a prendere dalla Excel in modo che prima di importare i dati di programmazione che posso aggiungere una ' a tutti i valori per impedire l'importazione non corretta.

Ho anche provato ad utilizzare OleDbDataAdapter.Update ma credo che questo non sarà di aiuto come questo accade dopo che la tecnica è importata. E 'corretto?

Posso manipolare dati in modo che ho importare i dati corretti? Come posso farlo?

È stato utile?

Soluzione

ho usato l'open source NPOI libreria per importare dati da Excel e preservare il formato dei dati come esso sia in foglio spread cioè 1234567 sarebbero importati come 1234567 invece di importare dati in un formato differente come 1.23E+06

Invece di importare i dati come indicato nella domanda di cui sopra, ho importare dati utilizzando 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
}

Altri suggerimenti

Ho appena ricevuto un problema simile (si trova qui: Quirky SELECT da file di Excel tramite il metodo OleDbDataAdapter (C #) ).

Prova con la seguente stringa di connessione, se si desidera utilizzare solo framework .NET senza librerie esterne:

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

Arrestare il motore da JET per ACE ha fatto per me.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top