将dataExporter填入xls Float数字成为电子表格单元格

时间:2018-03-09 11:38:21

标签: excel primefaces numbers data-export

环境:

  • jsf 2.2
  • primefaces 6.1
  • wilfly 10

我正在尝试使用来自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中得到的是以下内容

enter image description here

1 个答案:

答案 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);
    ...
}