问题描述
小弟想写个读取csv的代码,但碰到这么几个问题,希望大家帮帮忙1,如果用oledb读取的话,文件名含有空格或者-等特殊符号时,无法读取,但如果用split按,来拆分又遇到正文含有逗号会出错的情况2,oledb读数据会有丢失的情况,比如一列分别是ww11,aa,1,2,3,4这样的数据,读出来的话只会有int类型的,也就是说ww11和aa这2项会是空的,IMEX也设置等于1了还是不行,请问怎么办啊~~
解决方案
解决方案二:
csv文件最好有特定格式正文中如果会出现","好的话建议将正文用类似这样的"xxx","XXX"方式保存如果格式太复杂可以按固定长度去读取要搞个万能的读取方法出来不太现实
解决方案三:
OLeDB读应该没啥问题啊如果是标准的CSV,好像每个字段都是“”括起来的,你可以用“split字符串,然后去掉最前和最后的空还有中间的单单的,字符串(中间的空串不要去)
解决方案四:
引用2楼honkerhero的回复:
OLeDB读应该没啥问题啊如果是标准的CSV,好像每个字段都是“”括起来的,你可以用“split字符串,然后去掉最前和最后的空还有中间的单单的,字符串(中间的空串不要去)
好像oledb是不行哦,我试了很多次了,好像如果数字比字符串多,都按数字来读,字符串就会丢失字符串多的就按字符串读,数据都正常
解决方案五:
OleDb应该没问题吧。。我是这么做的using(OleDbConnectionconn=newOleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=C:UsersFUCDesktop;ExtendedProperties='Text;'")){DataTabledtTable=newDataTable();OleDbDataAdapteradapter=newOleDbDataAdapter("SELECT*FROM[Book1.csv]",conn);try{adapter.Fill(dtTable);}catch(Exceptionex){dtTable=newDataTable();}this.dataGridView1.DataSource=dtTable;}
csv是用excel以csv形式保存的,楼主也可以这样,方便测试111,""",""",ccc,333asdf,231,sdf31,"""asd34"",5"
解决方案六:
引用4楼geniusatm4的回复:
OleDb应该没问题吧。。我是这么做的C#codeusing(OleDbConnectionconn=newOleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=C:UsersFUCDesktop;ExtendedProperties='Text;'")){……
哥们,我和你的代码差不多的,没看明白你下面的那个数据,我是在excel里直接写的数据,存为csv文件的要不你试试看,第一列数据是ww11,aa,11,22,33,44六项,注意是列~~~前两项会丢失哦~
解决方案七:
问题解决没啊我也遇到了相同的问题
解决方案八:
楼主的例子里,前两项的逗号分隔符是全角的吧,改成半角的试试
解决方案九:
用oledb读取不跟逗号有关,那个逗号是csv自动生成的不会有全角的,如果用逗号来读取,split来拆分又会遇到正文含有无数个逗号和引号的问题
解决方案十:
逗号什么的,都能处理
解决方案十一:
ole读取excel或者csv的文件有问题的。根据我个人的经验来看,xls和csv中的数据,都分为显示和内容两部分,也就是说显示的数据就是你看到的数据,内容数据,就是后台的你看不到的数据。这样来说,对于每一个cell来说,都有text和vlaue1、value2等3个属性。如果你是一个cell一个cell的读取的话,你会发现,有一些cell,text有值,但是value没有,相反的情况也存在。但是如果你在文件中直接将值删除掉,手动打上去,那么text和value都有了。每一次读取excel的文件的,都让我觉得不是很放心,就是因为excel的显示和内容问题,他们并不一致!!所以后来,我取消了读取excel的操作,我每次都将excel的文件手动另存为了txt文件。然后读取的txt文件,这样绝对不会有数据丢失的问题。
解决方案十二:
补充一点,ole读取的是cell的value1属性的值。
解决方案十三:
ExcelJetcell.NET2.5.0