使用NPOI以印度风格显示千位分隔符的数字

时间:2014-01-30 15:41:21

标签: c# asp.net excel

我使用的是VS2008,ASP.net,C#.net。

我有一个使用NPOI dll导出到excel 2003的Web应用程序。 如何在导出的Excel工作表中以印度风格(12,12,34,567.89)显示千位分隔符的数字?具有该数字的这些单元格应适用于公式(sum())

4 个答案:

答案 0 :(得分:1)

根据您的CultureInfo,它应使用格式字符串"N"

检查CultureInfo.CurrentCulture.NumberFormat.NumberGroupSizes。如果是{3, 2, },您很高兴。所以:

yourNumber.ToString("N")

如果您当前的文化不好,您可以提供另一种文化,例如:

yourNumber.ToString("N", new CultureInfo("hi-IN"))

在我的系统上,(121234567.89).ToString("N", new CultureInfo("hi-IN"))提供"12,12,34,567.89"。这些是你想要的团体规模。

如您所知,格式化也可以这样进行:

string.Format(new CultureInfo("hi-IN"), "The number {0:N} is well formatted", yourNumber)

添加:出于好奇,我刚刚测试了我的系统中哪些特定文化使用{3, 2, }数字组大小,它们是:

hi-IN
bn-IN
pa-IN
gu-IN
or-IN
ta-IN
te-IN
kn-IN
ml-IN
as-IN
mr-IN
sa-IN
kok-IN
si-LK
ne-NP
bn-BD
en-IN

答案 1 :(得分:0)

试试这个

int value 773740;
Response.Write(value.ToString("N"));
//or
Response.Write(value.ToString("#,#"));

要使用千位分隔符将double格式化为字符串,请在常用的浮点格式化模式之前使用零和逗号分隔符,例如pattern“0,0.0”格式化数字以使用千位分隔符并且有一个小数位。

String.Format("{0:0,0.0}", 12345.67);     // "12,345.7"
String.Format("{0:0,0}", 12345.67);       // "12,346"

请参阅此处http://www.csharp-examples.net/string-format-double/

答案 2 :(得分:0)

与NPOI一起试用这种神奇的格式与印度风格:

ICell cell = row.GetCell(0);
cell.SetCellValue(1234567.89d);
IDataFormat dataFormatCustom = workbook.CreateDataFormat();
cell.CellStyle.DataFormat = dataFormatCustom.GetFormat("[>=10000000]##\\,##\\,##\\,##0;[>=100000] ##\\,##\\,##0;##,##0.00");

答案 3 :(得分:0)

'in vb.net ---
Dim xlApp As Object
Dim xlWorkBook As Object
Dim xlWorkSheet As Object

'--- Instantiate Excel and start a new workbook.
xlApp = CreateObject("Excel.Application")
xlWorkBook = xlApp.Workbooks
Dim xlCells As Excel.Range = Nothing
Dim rngCell As Excel.Range = Nothing
Dim lastrow As Long
lastrow = xlWorkSheet.UsedRange.Rows(xlWorkSheet.UsedRange.Rows.Count).Row
xlCells = xlWorkSheet.Range("H7:O" & lastrow)   '---change according to your need
For Each rngCell In xlCells
    If IsNumeric(rngCell.Value) = True Then
        rngCell.Value = CDec(rngCell.Value)
        rngCell.NumberFormat = "[>=10000000]##\,##\,##\,##0.00;[>=100000]##\,##\,##0.00;##,##0.00"
        rngCell.Value = Trim(rngCell.Value)
    End If
Next