首页 新闻 会员 周边

关于用C#解析Excel的疑问(紧急问题,贡献全部园豆!求救于大家!)

0
悬赏园豆:200 [已关闭问题] 关闭于 2012-04-12 21:44

读取了一个Excel,并使用下面语句:

Range range = datasheet.get_Range("D5", "D10");
System.Array values = (System.Array)range.Formula;

我本来想让values的元素都是对应单元格的纯数据,但发现有些元素获取到的却是计算公式(也就是说有些数据是通过公式自动计算出来的)。

Excel里面的数据格式有:整数,位数不等的小数,百分数,日期(如2012-3-3)。为了让数组values得到每个单元格的实际数据,而不是计算公式,如何用代码解决?

ps:每个单元格只有一种数据格式。

moon_prince的主页 moon_prince | 初学一级 | 园豆:20
提问于:2012-03-09 10:27
< >
分享
所有回答(9)
0

导入方式变一下

笨笨船博 | 园豆:202 (菜鸟二级) | 2012-03-09 10:50
0
邀月 | 园豆:25475 (高人七级) | 2012-03-09 10:58

我试过Range.Value和Range.Value2,实数形式的可以按原本显示,但是遇到如27%这种的,显示出来的只有

小数。Excel单元格的数据形式有这几种:百分数,实数(整数和小数),还有一种如 #DIV/0!(后面的感叹号原本有的)

怎么才能按照原本的形式显示出来?

支持(0) 反对(0) moon_prince | 园豆:20 (初学一级) | 2012-03-09 11:17

@moon_prince: 你这种思路好像有问题,EXcel的计算公式是在取到原始值后,再进行计算的,而编程中API你需要在计算前获取计算结果,这好像是矛盾的。
有一个笨办法,你可以循环每一个Cell,判断它的值类型,再设置格式,再读取值。

或许有某些像NPOI那样的sheet.ForceFormulaRecalculation属性可以利用,你可以再查一下。

支持(0) 反对(0) 邀月 | 园豆:25475 (高人七级) | 2012-03-09 11:35
0

Excel 是有這個問題,這個問題好像是本身的問題。

excell會自能轉換的。建立一個全新的excell試一下。

是不是 拷貝生成的excell呢?

無限遐想 | 园豆:3740 (老鸟四级) | 2012-03-09 12:11

是的,我拷贝了一份到指定的目录,让程序去读取它。

支持(0) 反对(0) moon_prince | 园豆:20 (初学一级) | 2012-03-09 12:48

如果客户自己想读取拷贝的文件,我也没办法啊。

支持(0) 反对(0) moon_prince | 园豆:20 (初学一级) | 2012-03-09 12:50
0

你这种方式取数据就是有这个问题,建议使用这种方式取数据,性能也是最快的

var worksheet = (_Worksheet)workbook.Sheets[1];
var usedRange = worksheet.UsedRange;
var valueArray = (object[,])usedRange.Value2;
李永京 | 园豆:3114 (老鸟四级) | 2012-03-09 13:02

其實用 這個 方法 也是一樣的。這個不是 讀取方法的問題。

支持(0) 反对(0) 無限遐想 | 园豆:3740 (老鸟四级) | 2012-03-09 13:03

http://www.excelpx.com/thread-52051-1-1.html看到了这条链接,不知可否,也不知道怎么处理为C#的,请教下!

支持(0) 反对(0) moon_prince | 园豆:20 (初学一级) | 2012-03-09 13:11
0

c#项目实战1200例(源代码和视频都有哦)下载地址:传送门

里边有操作word和excel  并且许多小例子  good luck for you

一个土豆一棵青菜 | 园豆:268 (菜鸟二级) | 2012-03-09 13:18
0

学习了。。。期待有更好的方法。。。

KivenRo | 园豆:1734 (小虾三级) | 2012-03-09 13:45
0

或者可以换一种思路
使用excel功能,将公式那一列选择性粘贴为数据(新列),直接读纯数据的新列

当然这种方法局限性也比较大,不知能否解决你的问题 

大浪淘沙 | 园豆:57 (初学一级) | 2012-03-12 11:36
0

你可以找下三方插件来实现你这个需求?

lonely_rain | 园豆:752 (小虾三级) | 2012-03-12 13:07
0

问题解决了,在Visual Studio论坛上取得答案:
http://social.msdn.microsoft.com/Forums/zh-cn/visualcshartzhchs/thread/f5a512fd-26bb-487c-8394-52f403ddaae4

最佳答案在那个绿色框里。

moon_prince | 园豆:20 (初学一级) | 2012-03-12 15:58
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册