文件是excel 但是格式非OLE2 格式
对于读取excel的内容 很简单,一般用ado连接直接读取,但是非OLE2 格式 ado是无法打开读取的,包括npoi;GemBox.Spreadsheet这些第三方也无法读取。
我只能使用Microsoft.Office.Interop.Excel com方式来读取了,不过出现了点问题 暂时无法解决 请继续往下面看
格式如下 里面内容是
用excel打开后可以识别(不得不佩服微软的软件智能)
问题:
我通过Microsoft.Office.Interop.Excel 的方式进行了读取 DataTable里面也有了数据 但是里面的值就有些问题
DataTable显示的如下:
问题来了,看出来了吗?和excel显示的不一样
时间字段变成了double 我很纳闷 我希望它默认为string; google了下通过设置单元格格式成字符串
excelCell.NumberFormatLocal = "@";
但是不起作用 如图:
本来想通过判断类型来解决,但是 我觉得 这样效率极低
求高手给个解决之道
可以搜索一下C# CSV,园子里就有相关的文章。
多谢!
http://blog.csdn.net/weizhiai12/article/details/7099823
虽然我的问题可以换成这个处理
但是那个datetime变成double还没解决,遗憾
@Rainier-Soft.Com:
@Diose:
无意间看到别人的代码 解决了 我日。。。
先设置 worksheet.Columns.EntireColumn.AutoFit(); 让列自动适应内容
通过 ((Microsoft.Office.Interop.Excel.Range)worksheet.Cells[r, c]).Text 获取文本 这里没有改变格式 excel上面显示的是什么 取出来就是什么。
@Diose: 不错,解决了就好
FileStream才是最正确的解决方案,你这文件并不是真正的Excel格式。
感谢你的回答:)
如果通过代码分析文件来构造一个DataTable的话,这样做 我感觉说是不安全的。出错的可能性较多。(我没有把握写一个较为完善的函数来处理)
好吧 如果我换成一个真正的OLE2 格式 的excel文件 ,也会出现这个时间格式变 double的问题
借住 Microsoft.Office.Interop.Excel 强大功能来起到一个转换作用,是一个可行性 安全性较高 的方法。
数据已经到DataTable里了 我只是在问 如何在Microsoft.Office.Interop.Excel放到DataTable之前把单元格都设置为字符串呢。
@Diose: 凭直觉,你用错了属性,你试试excelCell.Text属性,再试试TextToColumns()方法。如果是标准的Excel,最好是用OleDb来读取。
应该是excel列的数据类型导致的。尝试excel中单元格格式设置为文本.看是否出现这个现象。
看你的调试例子中.时间类型都变成double类型..尝试转化看看.应该是转换成了时间戳类型,即从一个起始时刻到当前的天数、描述之类的
感谢你的回答:)
转换我目前还无法下手 因为格式比较乱 而且我也不确定那些列是什么类型 我只想干一件事,就是通过Microsoft.Office.Interop.Excel来处理, 因为excel上面显示的是正确的,为什么通过代码处理之后就是double了呢。。关键是这个问题
NumberFormatLocal = "@";
@Diose:非OLE2格式 指的什么
@邢少: 标准的office 文件格式 规则