首页 新闻 会员 周边

NPOI 导入数据,获取货币格式的问题

0
悬赏园豆:40 [待解决问题]

我在导入excel的时候遇到这样一个问题,有一列是货币格式,里面有$100、hk100 、AUS100,就是一列里面有各种国家的货币格式,但是我导入到datagrid里面显示的时候只能读取100不能获得前面的钱币符号,我在网上查了如果用format每次只能解决一种货币符号,但是我这一列里面有各种货币形式,求教各位大神。。

愤怒的小象的主页 愤怒的小象 | 初学一级 | 园豆:174
提问于:2014-11-14 10:26
< >
分享
所有回答(3)
0

提示:货币符合不是以值的形式存在EXCEL中,所以你读取的话,要读两次,

一次读值,一次读格式,格式在Excel中的函数名是Formula

在NPOI中是myCell.CellFormula。

注: myCell是cell(格子)对象,你需要自己先得到这个对象,

形式类似myrow=mysheet.rows(0)

mycell=myrow.cells(0)

爱编程的大叔 | 园豆:30839 (高人七级) | 2014-11-14 10:37

我想通过DataTable来获取Excel数据,最后填充到DataGrid里面。 获取了Excel单元格格式和值以后,应该怎么用DataTable来接收呢,我找了下,DataTable.Row里面好像没有设置Type的属性和方法。求指教。。

支持(0) 反对(0) 愤怒的小象 | 园豆:174 (初学一级) | 2014-11-14 10:55

@愤怒的小象: 

如果要用DataTable的话,一个方法是你加多一列DataColumn,用来保存货币格式。

另外,你要在DataGrid中绑定的时候,可以通过动态解析这多出来的一列,实现对当前行中货币列的格式化。

 

原则上来说,对于一个数据表中存在不同货币方式的数据,货币是需要保存在数据列中的。

通常情况下,只有说所有行都采用同一种货币的情况,才不需要保存货币样式。

支持(0) 反对(0) 爱编程的大叔 | 园豆:30839 (高人七级) | 2014-11-14 11:16

@爱编程的大叔: 试了一下还是不太行,想换个方法,如何读取ExcelX显示的值,而不是真实值,因为这一列只需要显示即可,就是Excel显示$100,其实值是100.不知道大神你有方法不,找了半天了。。

支持(0) 反对(0) 愤怒的小象 | 园豆:174 (初学一级) | 2014-11-14 14:08

@愤怒的小象:  如果你只需要显示,DataColumn的数据类型设置为String就可以了啊。

支持(0) 反对(0) 爱编程的大叔 | 园豆:30839 (高人七级) | 2014-11-14 14:34

@爱编程的大叔: 但是比如Excel里面的单元格格式是货币,单元格内显示的是$100,但是单元格真实的值只是100,所以用Npoi读取过来得值也是100,我想把$100全读取出来显示出来

支持(0) 反对(0) 愤怒的小象 | 园豆:174 (初学一级) | 2014-11-14 15:10

@愤怒的小象: 我前面不是说了,你读Formula才知道啊。

两件事,一是如何读,读值,读显示格式。

二是如何保存,如果只需要显示正确,就保存为文本字符串。

支持(0) 反对(0) 爱编程的大叔 | 园豆:30839 (高人七级) | 2014-11-14 15:32

@爱编程的大叔: 我试过了我后台单独读取那列的值

IRow row = sheet.GetRow(i);
ICell cell = row.Cells[9];
string a = cell.CellFormula;

抛出了异常 Cannot get a formula value from a numeric cell 

支持(0) 反对(0) 愤怒的小象 | 园豆:174 (初学一级) | 2014-11-14 15:43

@愤怒的小象: sorry, 应该是cell.NumberFormatLocal

支持(0) 反对(0) 爱编程的大叔 | 园豆:30839 (高人七级) | 2014-11-14 16:21

@爱编程的大叔: 那不是double的吗,那就无法赋值$100这种字符串了,我看了cell的属性里面,没有一个值是$100这种形式的,都是100或者100.0,还得在Excel里面做文章,直接把$100存成文本才行

支持(0) 反对(0) 愤怒的小象 | 园豆:174 (初学一级) | 2014-11-14 16:25

@愤怒的小象: 你要能够区分这是两件事,你才能理解我在说什么。

两件事,一是如何读,读值100,读显示格式,比如是"$0.00"或是“HKD0.00”。

二是如何保存,如果只需要显示正确,就保存为文本字符串。

支持(0) 反对(0) 爱编程的大叔 | 园豆:30839 (高人七级) | 2014-11-14 16:36

@爱编程的大叔: 我明白你的意思

一、值读出来肯定是100,但是从NPOI读出来的显示格式,怎么赋值到gridview,gridview里面的单元格我没找到能赋值显示格式的属性。

二、如果保存文本字符串,用NPOI读出来的只有100,没有一个属性的值是文本的$100,所以我说想找个办法把EXCEL中的货币格式直接保存成文本再用C#读

支持(0) 反对(0) 愤怒的小象 | 园豆:174 (初学一级) | 2014-11-18 17:57
0

换个思路。

清海扬波 | 园豆:825 (小虾三级) | 2014-11-18 16:17
0

var index = row.GetCell(0).CellStyle.DataFormat;        

     var strFormat = workbook.CreateDataFormat().GetFormat(index);

            if (strFormat.IndexOf("$") != -1)             {                 return "USD";             }

            if (strFormat.IndexOf("¥") != -1 || strFormat.IndexOf("¥") != -1)             {                 return "RMB";             }

 

 

 

部分代码,也是一种思路,不知道你是怎么解决的问题!

土豆哥 | 园豆:91 (初学一级) | 2016-07-08 12:39
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册