在 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 月:
我在网页上有一些数据表,我想将所有数据表导出到一个 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 月: