我正在开发会计软件,它还将以Excel格式(.xls)创建报告 我几乎在每个需要Excel报告的项目中都使用了NPOI,没有任何重大问题。
但我现在面临一个问题,似乎无法找到任何浏览互联网的解决方案。
正如您所看到的,在报告中间,“货币”列自动更改格式,而不是正确格式化货币,边框以及该列中的所有内容。
我已经做了好几次,没有成功。
这是我用来创建样式的代码(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);
任何猜测? 提前谢谢!
答案 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);