Poi Excel Unable to apply background Color

♀尐吖头ヾ 提交于 2019-12-25 14:03:13

问题


I am using POI for generating excel. I have a scenario Like i want to apply background to cell row in the table.But i am unable to do it.I have given the code below.Please tell what is the mistake in my code or is the code i am doing is correct..

Code

    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();
    }

回答1:


If you use this snippet it will work:

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

I can give you this link where a description is given how to use XSSF. The main change is to create a new XSSFCellStyle out of the Workbook and to set the fill-pattern.




回答2:


Apache POI 4.0.0 answer. How to set background color of an Excel cell:

//create workbook/sheet/row/cell

IndexedColorMap colorMap = outputWorkbook.getStylesSource().getIndexedColors();
java.awt.Color pigeonBlue = new java.awt.Color(189, 215, 238);
XSSFColor myBackgroundColor = new XSSFColor(pigeonBlue, colorMap);
XSSFCellStyle myCellStyle = outputWorkbook.createCellStyle();
myCellStyle.setFillForegroundColor(myBackgroundColor);
myCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
outputCell.setCellStyle(myCellStyle);
outputCell.setCellValue("Hi There");

// write & close workbook

Your cell should look something like this:



来源:https://stackoverflow.com/questions/31670270/poi-excel-unable-to-apply-background-color

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!