开发者

manipulate data before importing from excel to dataset

I have a couple of columns of data in an excel sheet which I have to import to my application.

I do this using -

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

dset开发者_开发知识库ExcelInfo = new DataSet();            
oledaExcelInfo.Fill(dsetExcelInfo, "CCInfo");

While this imports data successfully, sometimes the data is imported incorrectly i.e. sometimes a number 1234567 could be imported as 1.23E+06

This can be solved if the data in the excel file is '1234567 instead of 1234567 (append the single quotation mark)

I am now trying to manipulate data that I fetch from the excel so that before I import the data I can programmatically append a ' to all the values to prevent the incorrect import.

I even tried using OleDbDataAdapter.Update but I guess this will not help as this happens after the data is imported. Is that correct?

Can I manipulate data so that I import the correct data? How can I do it?


I used the open source NPOI library to import data from excel and preserve format of the data as it was in the spread sheet i.e. 1234567 would be imported as 1234567 instead of importing data in a different format like 1.23E+06

Instead of importing data as shown in the question above, I import data using NPOI library -

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
}


I just got a similar problem ( find it here: Quirky SELECT from Excel file via OleDbDataAdapter method (C#) ).

Try with the following connection string, if you want to use just .NET framework without external libraries:

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

Switching the engine from JET to ACE did it for me.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜