C#读取Excel表中的数据时,为何有些行的字段内容读取不到>?

Ny-6000 2011-05-17 02:55:55
江湖救急!

rt.

C#读取Excel表中的数据时,为何有些行的字段内容读取不到>?


读取方法示例:

string str = "SELECT * FROM [Sheet1$]";
return this.cmd.ExecuteReader();



数据表有14个字段,
测试文件中有三行数据,中间一行的第一列,读取不到字段内容,求救高人
...全文
1308 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
HermanWang01 2013-07-05
  • 打赏
  • 举报
回复
无法读取EXCEL中的数据单元格。有数据,但是读出来全是空值。 解决方法: 1.在导入数据连接字符串中,将IMEX=1加入,“Provider=Microsoft.Jet.OLEDB.4.0;Data Source="C:\Data.xls";Extended Properties="Excel 8.0;HDR=Yes;IMEX=1; ”,这样就可以。 注: “HDR=Yes;”指示第一行中包含列名,而不是数据; “IMEX=1;”通知驱动程 序始终将“互混”数据列作为文本读取。 两者必须一起使用。 本以为这样就OK了。但在实际使用过程中,这样设置还是不行,查阅了不少资料才发现,原来还有一个注册表里的信息需要修改,这样带能让excel不再使用前8行的内容来确定该列的类型。 注册表修改内容如下: 在HKEY_LOCAL_MACHINE\Software\Microsoft\Jet\4.0\Engines\Excel有一个TypeGuessRows值,预设是8,表示会先读取前8列来决定每一个栏位的型态,所以如果前8列的资料都是数字,到了第9列以后出现的文字资料都会变成null,所以如果要解决这个问题,只要把TypeGuessRows机码值改成0,就可以解这个问题了。
心灵彩虹 2011-05-17
  • 打赏
  • 举报
回复

colomtext = workSheet.get_Range(ColNum + "3", Missing.Value).Value2.ToString(); //获取字母列名称

恭喜楼主解决问题,结贴吧。
636f6c696e 2011-05-17
  • 打赏
  • 举报
回复
解决了就好~~
Ny-6000 2011-05-17
  • 打赏
  • 举报
回复
为什么有效单元格数据不显示出来?

出现这种情况的可能原因是,默认连接中,数据提供程序根据前面单元格推断后续单元个的数据类型。

可以通过 Extended Properties 中指定 IMEX=1

“IMEX=1;”通知驱动程序始终将“互混”数据列作为文本读取

---------------------
我的数据,确实读取不出来的,是数字加字母混合,其余两行是纯数字.

咱,今儿个有点高兴 .
Ny-6000 2011-05-17
  • 打赏
  • 举报
回复
解决同一列中“字符串”和“数字”两种格式同时存在,读取时,不能正确显示“字符串”格式的问题:set xlsconn=CreateObject("ADODB.Connection") xlsconn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&server.mappath(xlspath)&";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"""
主要是驱动的问题,需要添加hdr 和 imex,
其中,hdr取值yes,no ,表示第一行是否为字段名
imex 取值1,2,
其中1 正是解决此问题的关键
------------------
解决了,自个解决地.嘻嘻.
鸭梨山大帝 2011-05-17
  • 打赏
  • 举报
回复
string str = "SELECT * FROM [Sheet1$]";
return this.cmd.ExecuteReader();

你要了解这类访问EXCEL Provider的运行机制.

这种访问方式,provider内部机制回去自动推测判断每列的单元格数据储存类型的.

之所以部分行列的单元格指读取不出来,大部分是因为数据类型的问题.

特别是 同一列有数字,而部分数字储存格式不同,你打开EXCEL就可以看到有绿色的小三角在左上角.

这类读取出来就有可能是空.
houyanjun 2011-05-17
  • 打赏
  • 举报
回复
1、当某列数据中含有混合类型时,在.NET中使用Microsoft.Jet.OLEDB.4.0来读取Excel文件造成数据丢失是不可避免的,要解决这个问题只能考虑采用其它数据读取方法。
2、在.NET中读取Excel文件的另外一种方法是回到使用传统COM组件,但使用COM组件来读取Excel文件数据的效率较低,在作释放的时候有可能碰到不可预知的错误,特别开发Web应用的程序应该慎重使用
3、一种有效的方法可以是,在读取Excel的.xls类型的文本数据之前,先将其转换为.csv格式,在Excel中直接另存为这种格式就可以达到转换的目的。CSV文件又称为逗号分隔的文件,是一种纯文本文件,它以“,”分隔数据列
4、对csv文件不要采用ole db或odbc方法读取,这样还会出现同样问题。要采用普通的读取文本文件的方法打开文件,读取第一行,用“,”作为分隔符获得各字段名,在DataTable中创建对应的各字段,字段的类型可以统一创建成“string”。
参考代码(demo)如下:

String line;
  String [] split = null;
  DataTable table=new DataTable("auto");
  DataRow row=null;
  StreamReader sr=new StreamReader("c:/auto.csv",System.Text.Encoding.Default);
  //创建与数据源对应的数据列
  line = sr.ReadLine();
  split=line.Split(',');
  foreach(String colname in split){
  table.Columns.Add(colname,System.Type.GetType("System.String")); }
  //将数据填入数据表
  int j=0;
  while((line=sr.ReadLine())!=null){
   j=0;
   row = table.NewRow();
   split=line.Split(',');
   foreach(String colname in split){
   row[j]=colname;
   j++;}
   table.Rows.Add(row);}
   sr.Close();
  //显示数据
  dataGrid1.DataSource=table.DefaultView;
  dataGrid1.DataBind();


110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧