环境:
我正在尝试使用来自primefaces的dataExporter将dataTable导出到excel,但我首先得到
<p:commandButton id="btnExpExcel"
alt="#{msgs.inv_exportinvoices}"
ajax="false">
<p:dataExporter type="xls" target="lstFactures"
fileName="invoices"/>
</p:commandButton>
<p:dataTable id="lstFactures" var="inv"
...
选项1 我进入xls pex。 83.2但我们使用十进制而不是。
...
<p:column headerText="#{msgs.total}">
<h:outputText value="#{inv.total}">
<f:convertNumber locale="#{localeBean.locale}"/>
</h:outputText>
</p:column>
...
选项2 我进入xls pex。 83,2但excel将其作为文本处理而不是数字
...
<p:column headerText="#{msgs.total}">
<h:outputText value="#{inv.total}" />
</p:column>
...
** Option3 ** with
public void postProcessXLS(Object document){ HSSFWorkbook wb =(HSSFWorkbook)文件; HSSFSheet sheet = wb.getSheetAt(0); HSSFRow标题;
HSSFCellStyle cellStyle = wb.createCellStyle();
cellStyle.setFillForegroundColor(HSSFColor.GREEN.index);
cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
int ind = 0;
for (int row = 0; row < invoices.size() + 1; row++) {
header = sheet.getRow(row);
for (int col = 0; col < header.getPhysicalNumberOfCells(); col++) {
...
}
if (col == 5) {
HSSFCell cell = header.getCell(col);
//Total is a float
cell.setCellValue(invoices.get(ind).getTotal());
ind++;
}
}
}
}
}
我也试过exportFuction =“#{inv.total}”但是我遇到了一些错误exportFunction =“#{inv.total}”:找不到方法...
我在xls中得到的是以下内容
答案 0 :(得分:4)
p:dataTable中的所有字段都将导出为文本。 如果要以不同的格式转换值,则必须实现postProcessor方法。
例:
page.xhtml
<p:dataExporter type="xls" target="lstFactures" fileName="invoices" postProcessor="#{bean.ppMethod}" />
Class Bean
public void ppMethod(Object document) {
Workbook workbook = (Workbook) document;
...
CellStyle totalCellStyle = workbook.createCellStyle();
totalCellStyle.setDataFormat(workbook.createDataFormat().getFormat("#,##0.00"));
Cell currentCell = workbook.getSheetAt(0).getRow(0).getCell(0);
currentCell.setCellValue(Double.parseDouble(currentCell.getStringCellValue()));
currentCell.setCellStyle(defaultCellStyle);
...
}