2015-07-28 93 views
0

我使用POI来生成excel。我有一个场景就像我想应用背景到表中的单元格行,但我无法做到这一点。我已经给出了下面的代码。请告诉我的代码中有什么错误,或者我正在做的代码是正确的..Poi Excel无法应用背景颜色

代码

System.out.println("Called"); 
    try { 

     XSSFWorkbook xb = new XSSFWorkbook(); 
     XSSFSheet sheet = xb.createSheet(sheetName); 
     XSSFCellStyle cellStyle = xb.createCellStyle(); 
     XSSFFont font = xb.createFont(); 
     int rowIdx = 10; 
     short cellIdx = 1; 

         CommonUtils.getGlobalVariable("GLOBAL.M_COMP_CODE")); 
     int rowNo = 0; 
     // Row 1 
     XSSFCellStyle boldCellStyle = xb.createCellStyle(); 
     XSSFFont boldFont = xb.createFont(); 
     XSSFRow row1 = sheet.createRow(rowNo); 
     XSSFCell cell1 = row1.createCell(1); 
     boldFont.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD); 
     boldFont.setColor(new XSSFColor(Color.RED)); 
     boldCellStyle.setAlignment(CellStyle.ALIGN_CENTER); 
     boldCellStyle.setFont(boldFont); 
     cell1.setCellValue(headingName); 
     sheet.addMergedRegion(CellRangeAddress.valueOf("B1:I1")); 
     cell1.setCellStyle(boldCellStyle); 
     XSSFCellStyle cellStyleAmount = xb.createCellStyle(); 
     cellStyleAmount.setAlignment(XSSFCellStyle.ALIGN_RIGHT); 
     rowNo++; 
     // Row 2 
     if ((String) addrDetails.get("COMP_NAME") != null) { 
      XSSFRow row2 = sheet.createRow(rowNo); 
      XSSFCell compNamecell = row2.createCell(1); 
      compNamecell.setCellStyle(cellStyle); 
      compNamecell.setCellValue("Company"); 
      sheet.addMergedRegion(CellRangeAddress.valueOf("B2:B2")); 
      compNamecell = row2.createCell(2); 
      compNamecell 
        .setCellValue((String) addrDetails.get("COMP_NAME")); 
      sheet.addMergedRegion(CellRangeAddress.valueOf("C2:G2")); 
      compNamecell.setCellStyle(cellStyle); 
     } 
     rowNo++; 
     // Row 3 
     if ((String) addrDetails.get("ADDR_NAME") != null) { 
      XSSFRow row3 = sheet.createRow(rowNo); 
      XSSFCell cell = row3.createCell(1); 
      cell = row3.createCell(1); 
      cell.setCellStyle(cellStyle); 
      cell.setCellValue("Address "); 
      sheet.addMergedRegion(CellRangeAddress.valueOf("B3:B3")); 
      cell = row3.createCell(2); 
      cell.setCellValue((String) addrDetails.get("ADDR_NAME")); 
      sheet.addMergedRegion(CellRangeAddress.valueOf("C3:G3")); 
      cell.setCellStyle(cellStyle); 
     } 
     rowNo++; 
     if (addrDetails.get("COMP_ADD_1") != null) { 
      XSSFRow row4 = sheet.createRow(rowNo); 
      XSSFCell cell = row4.createCell(1); 
      cell = row4.createCell(1); 
      cell.setCellStyle(cellStyle); 
      cell.setCellValue(""); 
      sheet.addMergedRegion(CellRangeAddress.valueOf("B4:B4")); 
      cell = row4.createCell(2); 
      cell.setCellValue((String) addrDetails.get("COMP_ADD_1")); 
      sheet.addMergedRegion(CellRangeAddress.valueOf("C4:G4")); 
      cell.setCellStyle(cellStyle); 
     } 
     rowNo++; 
     if (addrDetails.get("COMP_ADD_2") != null) { 
      XSSFRow row5 = sheet.createRow(rowNo); 
      XSSFCell cell = row5.createCell(1); 
      cell = row5.createCell(1); 
      cell.setCellStyle(cellStyle); 
      cell.setCellValue(""); 
      sheet.addMergedRegion(CellRangeAddress.valueOf("B5:B5")); 
      cell = row5.createCell(2); 
      cell.setCellValue((String) addrDetails.get("COMP_ADD_2")); 
      sheet.addMergedRegion(CellRangeAddress.valueOf("C5:G5")); 
      cell.setCellStyle(cellStyle); 
     } 
     rowNo++; 
     if (addrDetails.get("COMP_ADD_3") != null) { 
      XSSFRow row6 = sheet.createRow(rowNo); 
      XSSFCell cell = row6.createCell(1); 
      cell = row6.createCell(1); 
      cell.setCellStyle(cellStyle); 
      cell.setCellValue(""); 
      sheet.addMergedRegion(CellRangeAddress.valueOf("B6:B6")); 
      cell = row6.createCell(2); 
      cell.setCellValue((String) addrDetails.get("COMP_ADD_3")); 
      sheet.addMergedRegion(CellRangeAddress.valueOf("C6:G6")); 
      cell.setCellStyle(cellStyle); 
     } 
     rowNo++; 
     if (addrDetails.get("CONTACT") != null) { 
      XSSFRow row7 = sheet.createRow(rowNo); 
      XSSFCell cell = row7.createCell(1); 
      cell = row7.createCell(1); 
      cell.setCellStyle(cellStyle); 
      cell.setCellValue("Contact"); 
      sheet.addMergedRegion(CellRangeAddress.valueOf("B7:B7")); 
      cell = row7.createCell(2); 
      cell.setCellValue((String) addrDetails.get("CONTACT")); 
      sheet.addMergedRegion(CellRangeAddress.valueOf("C7:G7")); 
      cell.setCellStyle(cellStyle); 
     } 
     rowNo++; 

     String pattern = "###,###.##"; 
     DecimalFormat decimalFormat = new DecimalFormat(pattern); 
     // Row 8 
     XSSFRow row8 = sheet.createRow(rowNo); 
     XSSFCell cell = row8.createCell(1); 
     cell = row8.createCell(0); 
     cell.setCellStyle(cellStyle); 
     cell.setCellValue("Document No :"); 
     cell = row8.createCell(1); 
     cell.setCellValue(fhdocNo); 
     cell.setCellStyle(cellStyle); 
     cell = row8.createCell(2); 
     cell.setCellStyle(cellStyle); 
     cell.setCellValue("From Date :"); 
     cell = row8.createCell(3); 
     cell.setCellValue(fromDate); 
     cell.setCellStyle(cellStyle); 
     cell = row8.createCell(4); 
     cell.setCellStyle(cellStyle); 
     cell.setCellValue("To Date :"); 
     cell = row8.createCell(5); 
     cell.setCellValue(toDate); 
     cell.setCellStyle(cellStyle); 
     cell = row8.createCell(6); 
     cell.setCellStyle(cellStyle); 
     cell.setCellValue("Period Type :"); 
     cell = row8.createCell(7); 
     cell.setCellValue(period); 
     cell.setCellStyle(cellStyle); 
     rowNo++; 
     // Table Header 
     XSSFRow row9 = sheet.createRow(rowNo); 
     XSSFCell cell9 = row9.createCell(1); 
     XSSFCellStyle headerCellStyleAmount = xb.createCellStyle(); 
     headerCellStyleAmount.setAlignment(HSSFCellStyle.ALIGN_RIGHT); 
     XSSFFont minusIndicatorfont = xb.createFont(); 
     minusIndicatorfont.setColor(new XSSFColor(Color.red)); 
     headerCellStyleAmount.setFont(minusIndicatorfont); 
     XSSFRow xssfHeader = sheet.createRow(rowIdx); 
     XSSFColor color1 = new XSSFColor(Color.gray); 
     XSSFCellStyle headCellStyle; 
     headCellStyle = (XSSFCellStyle) cell9.getCellStyle(); 
     headCellStyle.setFillBackgroundColor(new XSSFColor(new Color(216, 
       216, 216))); 
     cell9 = xssfHeader.createCell(1); 
     cell9.setCellStyle(cellStyle); 
     cell9.setCellValue(""); 
     for (int i = 0; i < listSize; i++) { 
      XSSFCell xssfCell = xssfHeader.createCell(cellIdx++); 
      xssfCell.setCellValue(monthList.get(i).getSD_LABEL()); 
      headCellStyle.setFillForegroundColor(color1); 
      headCellStyle.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND); 
      xssfCell.setCellStyle(headCellStyle); 
     } 
     rowIdx++; 
     xb.setSheetName(0, sheetName); 
     /* 
     * HttpServletResponse response = (HttpServletResponse) 
     * externalContext .getResponse(); OutputStream os = 
     * response.getOutputStream(); wb.write(os); 
     * response.setHeader("Content-Disposition", 
     * "attachment; filename=\"" + fileName + ".xls"); 
     * response.getOutputStream().flush(); 
     * response.getOutputStream().close(); 
     * FacesContext.getCurrentInstance().responseComplete(); 
     */ 
     ExternalContext externalContext = FacesContext.getCurrentInstance() 
       .getExternalContext(); 
     writeExcelToResponse(externalContext, xb, fileName); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

回答

2

如果您使用此代码段将工作:

XSSFCellStyle style = workbook.createCellStyle(); 
XSSFColor myColor = new XSSFColor(Color.RED); 
style.setFillForegroundColor(myColor); 
style.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND); 

我可以给你这个link其中将给出如何使用XSSF。 主要更改是从工作簿中创建新的XSSFCellStyle并设置填充模式。

+0

感谢它的工作..我可以给我自定义颜色...十六进制代码 –

+2

使用'新颜色(0xFF0000);'而不是'Color.Red' – MrT

+0

上面的代码适用于每一行...我应该如何将其应用于特定的行 –