初学C#踩坑第一篇
NPOI读取Excel设置单元格格式为数值不生效问题
问题简介:
C#使用NPOI写入Excel是修改单元格不能修改,生成后Excel需要打开后双击单元格才会改变格式,话不多说下面直接讲解决办法。
出现问题点:
给单元格赋值时全部赋值的时String类型的值,所以导致单元格格式不生效。
解决方法:
为单元格赋值时赋值相应类型的值,例如:单元格格式为数值,则赋值double。
//设置单元格格式代码
IDataFormat dataformat = workbook.CreateDataFormat();
ICellStyle style2 = workbook.CreateCellStyle();
style2.DataFormat = dataformat.GetFormat("0.0"); //改变小数精度【小数点后有几个0表示精确到小数点后几位】
IDataFormat dataformat = workbook.CreateDataFormat();
ICellStyle style2 = workbook.CreateCellStyle();
style2.DataFormat = dataformat.GetFormat("0.0"); //改变小数精度【小数点后有几个0表示精确到小数点后几位】
foreach (DataRow row in sourceTable.Rows)
{
IRow dataRow = sheet.CreateRow(rowIndex);
sheet.CreateRow(rowIndex).Height = 100 * 5;
foreach (DataColumn column in sourceTable.Columns)
{
//遍历DataRow时当列为金额时,将单元格格式改为数值格式
if (column.ToString() == "金额")
{
ICell RowCell = dataRow.CreateCell(column.Ordinal);
//来看这里 #############################################
//给单元格赋值时进行一下类型转换 double.Parse((row[column] ?? "").ToString())
RowCell.SetCellValue(double.Parse((row[column] ?? "").ToString()));
RowCell.CellStyle = style2;
}
else
{
ICell RowCell = dataRow.CreateCell(column.Ordinal);
RowCell.SetCellValue((row[column] ?? "").ToString());
RowCell.CellStyle = style;
}
}
到次就大功告成了。