[C#新手入门 九] C#读取Excel表中的数据时,有的数据读取不到
2016-01-18 15:09
375 查看
今天把程序发布到服务器IIS后,运行发现一个问题,有的excel导入模板出现导入数据丢失,某列第一行是空白没有值,后面是数字类型的数据,导入时整列值后变成空白了。
导入的方式是在客户机选择Excel导入模板,上传到服务器,在服务器上执行读取Excel,数据写入数据库。
解决方案百度搜的如下:
注册表修改内容如下:在HKEY_LOCAL_MACHINE\Software\Microsoft\Jet\4.0\Engines\Excel有一个TypeGuessRows值,预设是8, 将其改为0 就OK了。
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)如下:
导入的方式是在客户机选择Excel导入模板,上传到服务器,在服务器上执行读取Excel,数据写入数据库。
解决方案百度搜的如下:
注册表修改内容如下:在HKEY_LOCAL_MACHINE\Software\Microsoft\Jet\4.0\Engines\Excel有一个TypeGuessRows值,预设是8, 将其改为0 就OK了。
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)如下:
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();
相关文章推荐
- CSharpGL(9)解析OBJ文件并用CSharpGL渲染
- C#中 字符串的处理
- C#中如何从字符串中提取数字
- c# 扩展方法奇思妙用
- [C#]调用Bartender服务并打印bartender标签
- c#简单的序列化和反序列化
- C#OOP基础之类,字段,属性和方法。
- c# 基础连接已经关闭: 连接被意外关闭,错误的解决
- C#[1]this关键字和索引器
- c#6.0新特性
- C# 对word进行设置目录
- 关于C#中 的引用类型需要实例化,值类型不需要实例化的理解
- 什么是C#?什么是.NET Framework?
- C#-生成下面的模块时,启用了优化或没有调试信息:
- C#-解决“在证书存储区中找不到清单签名证书”
- C#除法精度
- C#运算符
- c#实现将Excel文件导出为csv和UTF8格式的txt文件
- 浅谈思路严谨的管理软件中的用户在线状态控制【附部分C#参考代码】
- C#窗体自适应