点晴MIS内部交流论坛加入收藏
新手上路
论坛搜索
 您的位置:点晴MIS系统问题答疑『 技术文档交流 』浏览当前帖子  
登 陆注 册论坛帮助  

  网站搜索
  搜索范围: 搜索方式: 关键词(可用空格分开)  

  作者及文章信息: 您是本文的第 1106 位读者 
admin

积分:84747
等级:网站管理员
文数:8087
注册:2004-7-20

  信 息   留 言   主 页   编 辑   引 用    

楼 顶 

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


转载:http://bbs.csdn.net/topics/360220285

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)如下:

1: String line;

2:   String [] split = null;

3:   DataTable table=new DataTable("auto");

4:   DataRow row=null;

5:   StreamReader sr=new StreamReader("c:/auto.csv",System.Text.Encoding.Default);

6:   //创建与数据源对应的数据列

7:   line = sr.ReadLine();

8:   split=line.Split('','');

9:   foreach(String colname in split){

10:   table.Columns.Add(colname,System.Type.GetType("System.String")); }

11:   //将数据填入数据表

12:   int j=0;

13:   while((line=sr.ReadLine())!=null){

14:    j=0;

15:    row = table.NewRow();

16:    split=line.Split('','');

17:    foreach(String colname in split){

18:    row[j]=colname;

19:    j++;}

20:    table.Rows.Add(row);}

21:    sr.Close();

22:   //显示数据

23:   dataGrid1.DataSource=table.DefaultView;

24:   dataGrid1.DataBind();


无法读取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,就可以解这个问题了。

  离 线  2018-2-9 0:50:30 
  本文章共有 0 页, 0 张回文,每页有 10 张回文 >> [ ]
页码:
Copyright 2003-2018 ClickSun All Rights Reserved