从Excel中读取数据

我一直在尝试从Excel文件中读取数据。 它已经成功了,但我遇到了一个问题。 每当单元格的格式和数据input的数据不匹配时,我得到空的数据


例如

如果数据单元被格式化为Date – dd/mm/yyyy ,并且用户input13/17/2011 ,则input的date格式和date是矛盾的,所以excel给了我完全空的单元格。 只有单元格格式是文本,我才能得到input的数据。

为什么在input的date格式不符合单元格格式设置的情况下,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"); 

你可以改变你的连接string

 "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驱动程序在不同格式的列中的数据。

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