如何使用Primefaces中的自定义数据导出器在excel中设置字体?

时间:2018-10-09 05:06:32

标签: primefaces apache-poi

我正在使用Primefaces 6.1。我需要将报告列表导出为ex​​cel格式。为此,我使用了primefaces数据导出器.Dataexporter给了我excel格式。我也在Excel中设置了字体。但是该字体无法在我的excel文件中完全正常工作。设置的字体仅出现在表格标题中。 我的代码是这样的:

public void postProcessXLS(Object document) {
    HSSFWorkbook wb = (HSSFWorkbook) document;
    HSSFSheet sheet = wb.getSheetAt(0);
    HSSFRow header = sheet.getRow(0);

    HSSFCellStyle cellStyle = wb.createCellStyle();  
    cellStyle.setFillForegroundColor(HSSFColor.AQUA.index);
    cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
    HSSFFont fontHeader = (HSSFFont) wb.createFont();
    cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
    fontHeader.setFontName("Magnus Nepali");
    cellStyle.setFont(fontHeader);
    for(int i=0; i < header.getPhysicalNumberOfCells();i++) {
        HSSFCell cell = header.getCell(i);

        cell.setCellStyle(cellStyle);

    }
}

我的按钮代码是:

<p:commandButton id="excel" ajax="false">
    <p:dataExporter type="xls" target="tblReport" fileName="report" postProcessor="#{shareDividendMB.postProcessXLS}" />
</p:commandButton>

我的excel格式是这样的:enter image description here

只有excel表格标题已更改为定义的字体,其余数据为Arial字体。我尝试了除字体以外的其他字体,结果相同。

1 个答案:

答案 0 :(得分:1)

最后我找到了解决方案。我的工作代码如下:

 public void postProcessXLS(Object document) {
        HSSFWorkbook wb = (HSSFWorkbook) document;
        HSSFSheet sheet = wb.getSheetAt(0);
        HSSFCellStyle cellStyle = wb.createCellStyle();  
        cellStyle.setFillForegroundColor(HSSFColor.AQUA.index);
        cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
        HSSFFont fontHeader = (HSSFFont) wb.createFont();
        cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        fontHeader.setFontName("Magnus Nepali");
        cellStyle.setFont(fontHeader);
        for (Row row : sheet) {
            for (Cell cell : row) {
                cell.setCellStyle(cellStyle);
            }
        }

    }