Primefaces dataExporter to xls Float 数字成为电子表格单元格中的文本
Primefaces dataExporter to xls Float number becomes text in spreadsheet cell
环境:
- jsf 2.2
- primefaces 6.1
- 狼吞虎咽 10
我正在尝试使用 primefaces 的 dataExporter 将数据表导出到 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>
...
**选项 3 ** 与
public void postProcessXLS(Object 文档) {
HSSFWorkbook wb = (HSSFWorkbook) 文档;
HSSFSheet sheet = wb.getSheetAt(0);
HSSFRow header;
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++;
}
}
}
}
}
我也尝试过 exportFunction="#{inv.total}" 但我遇到了某种错误 exportFunction="#{inv.total}": 找不到方法...
我在 xls 中得到的是以下内容
p:dataTable 中的所有字段都导出为文本。
如果你想转换一个不同格式的值,你必须实现一个 postProcessor 方法。
示例:
page.xhtml
<p:dataExporter type="xls" target="lstFactures" fileName="invoices" postProcessor="#{bean.ppMethod}" />
Class豆子
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);
...
}
环境:
- jsf 2.2
- primefaces 6.1
- 狼吞虎咽 10
我正在尝试使用 primefaces 的 dataExporter 将数据表导出到 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>
...
**选项 3 ** 与
public void postProcessXLS(Object 文档) { HSSFWorkbook wb = (HSSFWorkbook) 文档; HSSFSheet sheet = wb.getSheetAt(0); HSSFRow header;
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++;
}
}
}
}
}
我也尝试过 exportFunction="#{inv.total}" 但我遇到了某种错误 exportFunction="#{inv.total}": 找不到方法...
我在 xls 中得到的是以下内容
p:dataTable 中的所有字段都导出为文本。 如果你想转换一个不同格式的值,你必须实现一个 postProcessor 方法。
示例:
page.xhtml
<p:dataExporter type="xls" target="lstFactures" fileName="invoices" postProcessor="#{bean.ppMethod}" />
Class豆子
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);
...
}