从Excel导入到数据集之前处理数据
-
27-09-2019 - |
题
我有几个在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
这可以如果在Excel文件中的数据是'1234567
代替1234567
(追加单引号)
我现在正在试图操纵数据,我从Excel中获取,这样我导入数据之前,我可以以编程方式追加'
所有的值,以防止不正确的导入。
我使用OleDbDataAdapter.Update甚至尝试过,但我想这不会帮助,因为数据被导入后出现这种情况。这是否正确?
我可以操纵数据,以便我输入正确的数据?我该怎么做?
解决方案
我使用的开放源码的数据,因为它的 NPOI库,向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
}
其他提示
我刚刚得到了类似的问题(在这里找到:古怪SELECT从经由OleDbDataAdapter的方法Excel文件(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为我做。
不隶属于 StackOverflow