从Excel读取数据

Roh*_*han 5 .net c# format excel date

我一直在尝试从excel文件中读取数据.它已经成功,但我遇到了一个问题.只要单元格的格式和单元格中输入的数据不匹配,我就会得到空数据


例如

如果数据单元格被格式化为日期 - dd/mm/yyyy并且用户输入13/17/2011,则作为日期格式和输入的日期是矛盾的,因此excel给我完全空单元格.仅当单元格格式为文本时,才会获得输入的数据.

为什么excel文件在输入日期格式不符合单元格格式的情况下给我空单元格?

这是读取excel数据的代码

if(fileEXT.Equals(".xls"))
{
   oledbConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Server.MapPath("../Portal_Docs/UploadDocs/"+filename+"")+";Extended Properties=Excel 8.0");
}
else if(fileEXT.Equals(".xlsx"))
{
   oledbConn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+Server.MapPath("../Portal_Docs/UploadDocs/"+filename+"")+";Extended Properties=\"Excel 12.0;HDR=YES;\"");
}
else if(fileEXT.Equals(".xlsm"))
{
   oledbConn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+Server.MapPath("../Portal_Docs/UploadDocs/"+filename+"")+";Extended Properties=Excel 12.0 Macro");
}

oledbConn.Open();
OleDbCommand cmd = new OleDbCommand("SELECT * FROM [Sheet1$]", oledbConn);
OleDbDataAdapter oleda = new OleDbDataAdapter();
oleda.SelectCommand = cmd;
DataSet ds = new DataSet();
oleda.Fill(ds,"LocationDetails");
Run Code Online (Sandbox Code Playgroud)

And*_*kov 2

您可以将连接字符串更改为

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Server.MapPath("../Portal_Docs/UploadDocs/"+filename+"")+";Extended Properties=Excel 8.0;HDR=Yes;IMEX=1"
Run Code Online (Sandbox Code Playgroud)

HDR=是;IMEX=1

告诉 OldDb 驱动程序列中的数据采用不同的格式。

  • 实际上,“IMEX=1”就是这样做的(据我所知,它将所有列视为文本)。“HDR=Yes”是不相关的:它指出工作表的第一行包含列标题而不是数据。 (2认同)