在 Primefaces Extensions Custom Exporter 工作

Work at Primefaces Extensions Custom Exporter

我在网页上有一些数据表,我想将所有数据表导出到一个 excel 文件,例如网页图像:

我想导出页面中显示的页脚。我尝试使用 rendered 和 exportable,两者都具有布尔属性,但没有办法。 这种行为的原因可能是什么?

我使用 customExport,执行 link Steps to Custom Exporter 上的步骤 当我调试代码时,我看到了在文档导出器上创建页脚的模式,它不包含可导出的标签 (isExportable())。在 class ExcelCustomExporter 的方法 "tableColumnGroup(Sheet sheet, DataTable table, String facetType){" 中,我需要添加一个 if: "if(column.isExportable()){" 来创建一个单元格并为其添加值,另一个 if 以相同的方式递增for(i++) 方法中使用的变量;只有 if 为真我创建单元格,添加值并增加变量 i.

修改代码如下:

protected void tableColumnGroup(Sheet sheet, DataTable table, String facetType) {
    ColumnGroup cg = table.getColumnGroup(facetType);
    List<UIComponent> headerComponentList = null;
    if (cg != null) {
        headerComponentList = cg.getChildren();
    }
    if (headerComponentList != null) {
        for (UIComponent component : headerComponentList) { 
            if (component instanceof org.primefaces.component.row.Row) {
                org.primefaces.component.row.Row row = (org.primefaces.component.row.Row) component;
                int sheetRowIndex = sheet.getLastRowNum() + 1;
                Row xlRow = sheet.createRow(sheetRowIndex);
                int i = 0;
                for (UIComponent rowComponent : row.getChildren()) {
                    UIColumn column = (UIColumn) rowComponent;
                    String value = null;
                    if (facetType.equalsIgnoreCase("header")) {
                        value = column.getHeaderText();
                    } else {
                        value = column.getFooterText();

                    }
                    int rowSpan = column.getRowspan();
                    int colSpan = column.getColspan();

                    Cell cell = xlRow.getCell(i);

                    if (rowSpan > 1 || colSpan > 1) {
                        if (rowSpan > 1) {
                            cell = xlRow.createCell((short) i);
                            Boolean rowSpanFlag = false;
                            for (int j = 0; j < sheet.getNumMergedRegions(); j++) {
                                CellRangeAddress merged = sheet.getMergedRegion(j);
                                if (merged.isInRange(sheetRowIndex, i)) {
                                    rowSpanFlag = true;
                                }

                            }
                            if (!rowSpanFlag) {
                                cell.setCellValue(value);
                                cell.setCellStyle(facetStyle);
                                sheet.addMergedRegion(new CellRangeAddress(
                                        sheetRowIndex, //first row (0-based)
                                        sheetRowIndex + (rowSpan - 1), //last row  (0-based)
                                        i, //first column (0-based)
                                        i  //last column  (0-based)
                                ));
                            }
                        }
                        if (colSpan > 1) {
                            cell = xlRow.createCell((short) i);

                            for (int j = 0; j < sheet.getNumMergedRegions(); j++) {
                                CellRangeAddress merged = sheet.getMergedRegion(j);
                                if (merged.isInRange(sheetRowIndex, i)) {
                                    cell = xlRow.createCell((short) ++i);
                                }
                            }
                            cell.setCellValue(value);
                            cell.setCellStyle(facetStyle);
                            sheet.addMergedRegion(new CellRangeAddress(
                                    sheetRowIndex, //first row (0-based)
                                    sheetRowIndex, //last row  (0-based)
                                    i, //first column (0-based)
                                    i + (colSpan - 1)  //last column  (0-based)
                            ));
                            i = i + colSpan - 1;
                        }
                    } else {
                        //TODO TRATAR E VERIRIFICAR SE  O VALUE PODE SER EXIBIDO
                        if (column.isExportable()) {
                            cell = xlRow.createCell((short) i);
                            for (int j = 0; j < sheet.getNumMergedRegions(); j++) {
                                CellRangeAddress merged = sheet.getMergedRegion(j);
                                if (merged.isInRange(sheetRowIndex, i)) {
                                    cell = xlRow.createCell((short) ++i);
                                }
                            }
                            cell.setCellValue(value);
                            cell.setCellStyle(facetStyle);
                        }    
                    }
                    if (column.isExportable()) {
                        i++;
                    }   
                }
            }

        }

    }

截屏,但 1 月到 5 月: