在使用NPOI导出excel的时候,设置cell样式,数据量多余6条之后,在后面几条数据没有样式(边框,对其,换行等)。

原因是设置CellStyle的时候把CreateCellStyle放在循环列集合里边,原版代码有问题的代码

HSSFRow dataRow = (HSSFRow)sheet.CreateRow(rowIndex);
foreach (DataColumn column in dtSource.Columns)
{
    HSSFCell newCell = (HSSFCell)dataRow.CreateCell(column.Ordinal);
    string drValue = row[column].ToString();
    switch (column.DataType.ToString())
    {
        case "System.String":
            {
                HSSFCellStyle strStyle = (HSSFCellStyle)workbook.CreateCellStyle();
                strStyle.BorderBottom = BorderStyle.Thin;
                strStyle.BorderTop = BorderStyle.Thin;
                strStyle.BorderLeft = BorderStyle.Thin;
                strStyle.BorderRight = BorderStyle.Thin;
                //strStyle.VerticalAlignment = VerticalAlignment.Center;
                strStyle.Alignment = HorizontalAlignment.Left;
                switch (detail.Format)
                {
                    case ExportFormat.Normal:
                        //strStyle.Alignment = HorizontalAlignment.Center;
                        strStyle.Alignment = HorizontalAlignment.Left;
                        break;
                    case ExportFormat.Formatted:
                        strStyle.WrapText = true;
                        break;
                }
                newCell.SetCellValue(drValue);
                newCell.CellStyle = strStyle;
                break;
            }
    }
}

 解决问题,需要将该样式提取到foreach外面就可以解决了

HSSFRow dataRow = (HSSFRow)sheet.CreateRow(rowIndex);
HSSFCellStyle strStyle = (HSSFCellStyle)workbook.CreateCellStyle();
strStyle.BorderBottom = BorderStyle.Thin;
strStyle.BorderTop = BorderStyle.Thin;
strStyle.BorderLeft = BorderStyle.Thin;
strStyle.BorderRight = BorderStyle.Thin;
foreach (DataColumn column in dtSource.Columns)
{
    HSSFCell newCell = (HSSFCell)dataRow.CreateCell(column.Ordinal);
    string drValue = row[column].ToString();
    switch (column.DataType.ToString())
    {
        case "System.String":
            {
                //strStyle.VerticalAlignment = VerticalAlignment.Center;
                strStyle.Alignment = HorizontalAlignment.Left;
                switch (detail.Format)
                {
                    case ExportFormat.Normal:
                        //strStyle.Alignment = HorizontalAlignment.Center;
                        strStyle.Alignment = HorizontalAlignment.Left;
                        break;
                    case ExportFormat.Formatted:
                        strStyle.WrapText = true;
                        break;
                }
                newCell.SetCellValue(drValue);
                newCell.CellStyle = strStyle;
                break;
            }
    }
}

  

相关文章:

  • 2021-04-30
  • 2022-12-23
  • 2021-09-25
  • 2022-12-23
  • 2022-12-23
  • 2018-05-08
猜你喜欢
  • 2021-07-27
  • 2022-12-23
  • 2021-11-27
  • 2021-09-15
  • 2021-11-28
  • 2021-09-12
相关资源
相似解决方案