当前位置: 首页 > 知识库问答 >
问题:

Primefaces data导出器到 xls 浮点数变为电子表格单元格中的文本

王凌
2023-03-14

环境:

    < li>jsf 2.2 < li>primefaces 6.1 < li>wilfly 10

我试图导出一个datatable到Excel与dataExport从primeface,但我首先得到

<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 document) { HSSFWorkbook wb = (HSSFWorkbook) document;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++;
                }
            }
        }
    }
}

我还尝试导出函数="#{inv.total} ",但出现某种错误exportFunction="#{inv.total} ":找不到方法...

我在xls中得到的是以下内容

共有1个答案

甄坚白
2023-03-14

p:dataTable中的所有字段都导出为文本。如果要将值转换为不同的格式,则必须实现postProcessor方法。

示例:
page.xhtml

<p:dataExporter type="xls" target="lstFactures" fileName="invoices" postProcessor="#{bean.ppMethod}" />

类豆

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);
    ...
}
 类似资料:
  • 我做了一个PHP脚本,使用api v4将一些信息导出到谷歌电子表格。当我尝试向单元格中添加注释时,我应该为每个注释向API发出请求,这对我来说是一个问题,前面已经解释过了。 我目前的方法是以下一种,我试图在单行的每一列上添加注释($HeaderNotes是一个数组): 在这种方法中,注释是一个接一个地添加的(使用循环),并且工作正常。主要的问题是,我做的请求和notes一样多,而谷歌的Cuota有

  • 问题内容: 我想在表格单元格中使用CSS,这样,如果文本太长而无法放在一行上,它将用省略号进行剪切,而不是换成多行。这可能吗? 我尝试了这个: 但是,似乎使文本(及其单元格)不断向右扩展,从而使表格的总宽度超出了其容器的宽度。但是,如果没有它,文本在碰到单元格的边缘时会继续换行。 问题答案: 要在表格单元溢出时用省略号剪切文本,您需要在每个类上设置CSS属性,以使溢出起作用。不需要额外的布局div

  • 我有一个谷歌电子表格,里面有多张表格,我想把每一张表格复制到一个新的电子表格中,并在一个特定的单元格中以文本命名新的电子表格。我很高兴运行脚本多次,所以我想让它复制活动表。 即。我所拥有的=称为“颜色”的电子表格——工作表1=“红色”,工作表2=“蓝色”,工作表3=“黄色”,等等。 我想要什么= 名为“红色”的电子表格。电子表格叫做"蓝色",电子表格叫做"黄色" 到目前为止,我有这个脚本,但它告诉

  • 我有一个file.xls扩展名,但另存为XMl电子表格2003,希望读取该文件并用java代码将其转换为.xls扩展名我的代码如下- 公共类ExcelImport{

  • 我可以从一个特定的查询中创建一个谷歌搜索结果列表,并将其导出到excel中吗?例如,我想用谷歌搜索佛罗里达州的牙齿矫正医生,并能将企业名称、电话号码和地址导出到excel电子表格中。我做了很多搜索,但找不到任何解决方案。我在找人给我指出正确的方向。非常感谢您的帮助,谢谢。

  • 当我在excel、LibreOffice Calc或Google Sheets中打开我的CSV时,每个单元格的字符限制被超过,一个单元格中的数据溢出到相邻的单元格中。如何防止这种情况发生,使文件保持其原始结构?或者,是否有其他方法可以编辑此文件以避免此问题?或者,如果没有,有没有办法切断任何超出单元格字符限制的内容,以便我可以正确使用电子表格?