在从excel导入数据集之前操作数据

时间:2010-08-11 12:39:38

标签: c# excel import npoi oledbdataadapter

我在excel表中有几列数据,我必须将其导入到我的应用程序中。

我这样做 -

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

虽然这会成功导入数据,但有时导入的数据不正确,有时可能导入1234567 1.23E+06 '1234567

如果excel文件中的数据为1234567而不是'(附加单引号),则可以解决此问题

我现在正在尝试操作从excel中获取的数据,以便在导入数据之前,我可以通过编程方式将{{1}}附加到所有值,以防止导入错误。

我甚至尝试过使用OleDbDataAdapter.Update,但我想这会有所帮助,因为导入数据后会发生这种情况。这是对的吗?

我可以操纵数据以便导入正确的数据吗?我该怎么做?

2 个答案:

答案 0 :(得分:1)

我使用开源NPOI library从excel导入数据并保留数据格式,就像在电子表格中一样,即1234567将导入1234567而不是导入数据使用其他格式,例如1.23E+06

我没有导入上述问题所示的数据,而是使用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
}

答案 1 :(得分:0)

我遇到了类似的问题(在此处找到:Quirky SELECT from Excel file via OleDbDataAdapter method (C#))。

如果您只想使用没有外部库的.NET框架,请尝试使用以下连接字符串:

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

将引擎从JET切换到ACE为我做了。