Frage

Ich habe ein paar Spalten von Daten in einer Excel-Tabelle, die ich Import meiner Anwendung haben.

Ich tue dies mit -

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

Während diese importiert Daten erfolgreich, manchmal werden die Daten importiert könnte falsch heißt manchmal eine Zahl 1234567 als 1.23E+06 importiert werden

Dies kann gelöst werden, wenn die Daten in der Excel-Datei ist '1234567 statt 1234567 (anhängen das einfache Anführungszeichen)

Ich bin jetzt versuchen, Daten zu manipulieren, dass ich aus der Excel holen, so dass, bevor ich die Daten importieren kann ich programmatisch append ein ' auf alle Werten den falschen Import zu vermeiden.

ich mit OleDbDataAdapter.Update sogar versucht, aber ich denke, das wird nicht helfen, da dies geschieht, nachdem die Daten importiert werden. Ist das richtig?

Kann ich Daten manipulieren, so dass ich die richtigen Daten importieren? Wie kann ich es tun?

War es hilfreich?

Lösung

habe ich die Open-Source- NPOI Bibliothek Importdaten aus Excel und bewahren Format der Daten, wie sie war in der Tabellenkalkulations dh 1234567 als 1234567 eingeführt würde anstelle von Daten in einem anderen Format wie 1.23E+06 Import

Statt Daten zu importieren, wie in der Frage oben gezeigt, ich importieren Daten NPOI Bibliothek -

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
}

Andere Tipps

Ich habe ein ähnliches Problem (Finden Sie es hier: Quirky SELECT aus Excel-Datei über OleDbDataAdapter-Methode (C #) ).

Versuchen Sie es mit der folgenden Verbindungszeichenfolge, wenn Sie nur .NET-Framework ohne externe Bibliotheken verwenden möchten:

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

Umschalten des Motors von JET zu ACE hat es für mich.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top