从Excel读取数据

时间:2011-03-22 03:40:49

标签: c# .net excel date format

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


e.g

如果数据单元格格式化为日期 - 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");

2 个答案:

答案 0 :(得分:2)

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

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

HDR =是; IMEX = 1

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

答案 1 :(得分:0)

我建议使用EPPLus库来处理excel文件,而不是OLEDB。它非常简单和全面。 Nuget包也可用于此。 http://nuget.org/packages/EPPlus