NPOI中的格式错误

时间:2017-04-27 16:05:33

标签: c# npoi

我正在开发会计软件,它还将以Excel格式(.xls)创建报告 我几乎在每个需要Excel报告的项目中都使用了NPOI,没有任何重大问题。

但我现在面临一个问题,似乎无法找到任何浏览互联网的解决方案。

This is the report I'm creating

正如您所看到的,在报告中间,“货币”列自动更改格式,而不是正确格式化货币,边框以及该列中的所有内容。

我已经做了好几次,没有成功。

这是我用来创建样式的代码(C#):

var baseStyle = workBook.CreateCellStyle();
        baseStyle.VerticalAlignment = VerticalAlignment.Top;
        baseStyle.FillForegroundColor = IndexedColors.White.Index;
        baseStyle.FillPattern = FillPattern.SolidForeground;
        baseStyle.BorderTop = BorderStyle.Thin;
        baseStyle.BorderBottom = BorderStyle.Thin;
        baseStyle.BorderLeft = BorderStyle.Thin;
        baseStyle.BorderRight = BorderStyle.Thin;
        baseStyle.WrapText = true;


private static void SetCellValuePrice(IRow row, ICellStyle cellStyle, int colIndex, decimal value)
    {
        var xlCell = row.CreateCell(colIndex);

        xlCell.SetCellValue(Convert.ToDouble(value));

        var newStyle = row.Sheet.Workbook.CreateCellStyle();
        newStyle.CloneStyleFrom(cellStyle);

        newStyle.DataFormat = row.Sheet.Workbook.CreateDataFormat().GetFormat("€ #,##0.00");

        xlCell.CellStyle = newStyle;
    }

使用示例(似乎在其他单元格中没有问题:

SetCellValue(row, baseStyle, colIndex++, data.Description);

任何猜测? 提前谢谢!

1 个答案:

答案 0 :(得分:2)

问题在于您为每个单元格创建样式,而您应该为每种单元格创建一种样式。

var baseStyle = workBook.CreateCellStyle();
...
var priceStyle = workBook.CreateCellStyle();
priceStyle.CloneStyleFrom(numberStyle);
priceStyle.DataFormat = workBook.CreateDataFormat().GetFormat("€ #,##0.00");

private static void SetCellValuePrice(IRow row, ICellStyle cellStyle, int colIndex, decimal value)
{
    var xlCell = row.CreateCell(colIndex);

    xlCell.SetCellValue(Convert.ToDouble(value));

    xlCell.CellStyle = cellStyle;
}

用法:

SetCellValue(row, priceStyle, colIndex++, data.Description);