NPOI GetFormat或GetBuiltinFormat

时间:2016-06-07 15:01:18

标签: c# npoi

将CellStyle应用于使用GetFormat或GetBuiltinFormat作为“#,#0”的单元格时,同样不会在单元格中呈现。我错过了什么吗?

例如,在单元格上呈现的数字应显示为10,000,而在单击时,公式栏应显示为10000

var sheetLabelCellStyle = hssfworkbook.CreateCellStyle();  
sheetLabelCellStyle.Alignment = HorizontalAlignment.Right;  
sheetLabelCellStyle.DataFormat = hssfworkbook.CreateDataFormat().GetFormat("#,##0");  
.  
.  
ICell cell = row.CreateCell(j,CellType.Numeric);  
.  
.  
System.Decimal objVal = Convert.ToDecimal(dt.Rows[i][columnName].ToString());  
columnValue = objVal.ToString("#,#0", CultureInfo.InvariantCulture);  
cell.SetCellValue(columnValue);  
cell.CellStyle = sheetLabelCellStyle;

目前它渲染为10000,在公式栏中也显示相同。虽然所需的细胞含量是10,000,而在配方条中它应该是10000

如果我删除将其转换为不变文化的objVal部分,则它在单元格和公式栏中显示为10000.00

1 个答案:

答案 0 :(得分:1)

在使用SetCellValue进行分配之前,将cellvalue转换为double类型而不是字符串解决了问题。

ICellStyle cellStyle = hssfworkbook.CreateCellStyle();
cellStyle.DataFormat = hssfworkbook.GetCreationHelper().CreateDataFormat().GetFormat("#,##0");
cellStyle.Alignment = HorizontalAlignment.Right;  
.  
.  
System.Decimal objVal = Convert.ToDecimal(dt.Rows[i][columnName].ToString());
.  
.  
cell.SetCellValue((Double)objVal);
cell.SetCellType(CellType.Numeric);
cell.CellStyle = cellStyle;

将其指定为字符串会导致所需的格式丢失。