0

我在 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 中获取的数据,以便在导入数据之前,我可以以编程方式将 a 附加'到所有值以防止错误导入。

我什至尝试使用 OleDbDataAdapter.Update 但我想这不会有帮助,因为这发生在数据导入之后。那是对的吗?

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

4

2 回答 2

1

我使用开源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
}
于 2010-08-24T13:56:58.887 回答
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 为我做到了。

于 2010-12-02T15:00:15.067 回答