读取了一个Excel,并使用下面语句:
Range range = datasheet.get_Range("D5", "D10");
System.Array values = (System.Array)range.Formula;
我本来想让values的元素都是对应单元格的纯数据,但发现有些元素获取到的却是计算公式(也就是说有些数据是通过公式自动计算出来的)。
Excel里面的数据格式有:整数,位数不等的小数,百分数,日期(如2012-3-3)。为了让数组values得到每个单元格的实际数据,而不是计算公式,如何用代码解决?
ps:每个单元格只有一种数据格式。
导入方式变一下
试试Range.Value
我试过Range.Value和Range.Value2,实数形式的可以按原本显示,但是遇到如27%这种的,显示出来的只有
小数。Excel单元格的数据形式有这几种:百分数,实数(整数和小数),还有一种如 #DIV/0!(后面的感叹号原本有的)
怎么才能按照原本的形式显示出来?
@moon_prince: 你这种思路好像有问题,EXcel的计算公式是在取到原始值后,再进行计算的,而编程中API你需要在计算前获取计算结果,这好像是矛盾的。
有一个笨办法,你可以循环每一个Cell,判断它的值类型,再设置格式,再读取值。
或许有某些像NPOI那样的sheet.ForceFormulaRecalculation属性可以利用,你可以再查一下。
Excel 是有這個問題,這個問題好像是本身的問題。
excell會自能轉換的。建立一個全新的excell試一下。
是不是 拷貝生成的excell呢?
是的,我拷贝了一份到指定的目录,让程序去读取它。
如果客户自己想读取拷贝的文件,我也没办法啊。
你这种方式取数据就是有这个问题,建议使用这种方式取数据,性能也是最快的
var worksheet = (_Worksheet)workbook.Sheets[1];
var usedRange = worksheet.UsedRange;
var valueArray = (object[,])usedRange.Value2;
其實用 這個 方法 也是一樣的。這個不是 讀取方法的問題。
http://www.excelpx.com/thread-52051-1-1.html看到了这条链接,不知可否,也不知道怎么处理为C#的,请教下!
学习了。。。期待有更好的方法。。。
或者可以换一种思路
使用excel功能,将公式那一列选择性粘贴为数据(新列),直接读纯数据的新列
当然这种方法局限性也比较大,不知能否解决你的问题
你可以找下三方插件来实现你这个需求?
问题解决了,在Visual Studio论坛上取得答案:
http://social.msdn.microsoft.com/Forums/zh-cn/visualcshartzhchs/thread/f5a512fd-26bb-487c-8394-52f403ddaae4
最佳答案在那个绿色框里。