如何使用Primefaces中的自定义数据导出器在excel中设置字体?
我使用的是primefaces 6.1。我需要将报表列表导出为excel格式。为此,我使用了primefaces数据导出器。Dataexporter为我提供excel格式。我还在excel中设置了字体。但该字体在我的excel文件中无法完全使用。设置的字体仅显示在表头。 我的代码如下:如何使用Primefaces中的自定义数据导出器在excel中设置字体?,primefaces,apache-poi,Primefaces,Apache Poi,我使用的是primefaces 6.1。我需要将报表列表导出为excel格式。为此,我使用了primefaces数据导出器。Dataexporter为我提供excel格式。我还在excel中设置了字体。但该字体在我的excel文件中无法完全使用。设置的字体仅显示在表头。 我的代码如下: public void postProcessXLS(Object document) { HSSFWorkbook wb = (HSSFWorkbook) document; HSSFSheet
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);
}
}
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);
}
}
}
public void后处理xls(对象文档){
HSSF工作手册wb=(HSSF工作手册)文件;
HSSFSheet sheet=wb.getSheetAt(0);
HSSFRow标题=sheet.getRow(0);
HSSFCellStyle cellStyle=wb.createCellStyle();
cellStyle.setFillForegroundColor(HSSFColor.AQUA.index);
cellStyle.setFillPattern(HSSFCellStyle.SOLID\u前景);
HSSFFont fontHeader=(HSSFFont)wb.createFont();
cellStyle.setAlignment(HSSFCellStyle.Alignment_CENTER);
fontHeader.setFontName(“Magnus Nepali”);
cellStyle.setFont(fontHeader);
对于(int i=0;i
我的按钮代码是:
<p:commandButton id="excel" ajax="false">
<p:dataExporter type="xls" target="tblReport" fileName="report" postProcessor="#{shareDividendMB.postProcessXLS}" />
</p:commandButton>
我的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);
}
}
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);
}
}
}
只有excel表格标题已更改为字体定义,其余数据为Arial字体。我尝试了其他字体,结果相同。最终我得到了解决方案。我的工作代码如下:
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);
}
}
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);
}
}
}
我不明白,但是。。您仅将字体应用于标题。您不应该对所有行上的所有单元格都执行相同的操作吗?Uhhhhh excel vs pdf。。。对不起,把事情搞混了:-(删除了评论(真丢脸)我怎么能这样做?我认为cell.setCellStyle(cellStyle);应该完成这项工作,但它不起作用@JasperdeVries@JasperdeVries是正确的,您只获取一行
HSSFRow header=sheet.getRow(0);
您需要在工作表中的所有行上循环并设置单元格样式。