我正在使用Primefaces 6.1。我需要将报告列表导出为excel格式。为此,我使用了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表格标题已更改为定义的字体,其余数据为Arial字体。我尝试了除字体以外的其他字体,结果相同。
答案 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);
}
}
}