NPOI设置显式列类型无法正常工作

时间:2017-08-18 12:49:57

标签: excel npoi

我正在使用NPOI Excel库生成Excel文件,在该Excel文件中我明确定义了Columns的列类型,如Date,String等。

我使用以下代码来实现此目的。

  var row = sheet.CreateRow(currentNPOIRowIndex++);
                    for (var colIndex = 0; colIndex < exportData.Columns.Count; colIndex++)
                    {
                        ICell cell = null;
                         cell = row.CreateCell(colIndex);
                        if (exportData.Columns[colIndex].DataType == typeof(DateTime))
                        {
                            if (exportData.Rows[rowIndex][colIndex].ToString() != "")
                            {
                                cell.SetCellValue((DateTime)exportData.Rows[rowIndex][colIndex]);
                                cell.CellStyle = (NPOI.HSSF.UserModel.HSSFCellStyle)book.CreateCellStyle();
                                cell.CellStyle.DataFormat = book.CreateDataFormat().GetFormat("yyyyMMdd HH:mm:ss");
                                cell = null;
                            }
                            else
                                cell.SetCellValue(exportData.Rows[rowIndex][colIndex].ToString());
                        }
                        else
                            cell.SetCellValue(exportData.Rows[rowIndex][colIndex].ToString());
                    }
                }

以上代码适用于42行,即它正确设置了列类型,但在42行之后,列类型不适用。

任何帮助都将受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

如果要为该列的所有单元格设置列格式,则需要设置默认列样式。请参阅以下xssf格式的示例。语法可能因您的hssf格式而有所不同,但它会让您知道您缺少的内容。

我从我的工作代码中提供给你。我使用的是NPOI 2.2.1.0版。 你可以评论一下// // cell = null;

XSSFWorkbook workbook = new XSSFWorkbook();
  XSSFSheet sheet = (XSSFSheet)workbook.CreateSheet("Template");

  XSSFFont defaultFont = (XSSFFont)workbook.CreateFont();
  defaultFont.FontHeightInPoints = (short)10;

  XSSFCellStyle headerStyle = (XSSFCellStyle)workbook.CreateCellStyle();
  headerStyle.WrapText = true;

  XSSFCellStyle defaultStyle = (XSSFCellStyle)workbook.CreateCellStyle();
  XSSFDataFormat defaultDataFormat = (XSSFDataFormat)workbook.CreateDataFormat();
  defaultStyle.SetDataFormat(defaultDataFormat.GetFormat("000-000-0000"));
  defaultStyle.FillBackgroundColor = IndexedColors.LightYellow.Index;                
  defaultStyle.FillForegroundColor = IndexedColors.LightTurquoise.Index;
  defaultStyle.SetFont(defaultFont);

  var row = sheet.CreateRow(0);
  for (int headerCount = 0; headerCount < headers.Count(); headerCount++)
  {
      row.CreateCell(headerCount).SetCellValue(headers[headerCount]);
      row.Cells[headerCount].CellStyle = headerStyle;
      sheet.SetDefaultColumnStyle(headerCount, defaultStyle);          
  }