2011-03-22 94 views
5

我一直在尝试从Excel文件读取数据。它取得了成功,但我遇到了一个问题。每当单元格的格式,并在单元格中输入的数据不那么匹配我得到空数据从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"); 
+1

一些关于如何实际读取单元的代码摘录对于发现问题很有用。 – 2011-03-22 03:44:49

+0

这是读取excel数据的代码 – Rohan 2011-03-22 03:58:54

+0

如何访问'ds.Tables [0] .Rows [0] .Cells [0]'? – 2011-03-22 04:15:12

回答

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

+2

实际上,'IMEX = 1'就是这样做的(它将所有列视为文本,afaik)。 “HDR = Yes”是无关紧要的:它表示表单的第一行包含列标题而不是数据。 – Heinzi 2011-06-07 11:11:10