导出为具有标题的动态列的Excel

时间:2015-06-30 08:03:02

标签: jsf primefaces datatable

在我的另一个应用程序中,我有一个带有动态列的数据表。我的代码应该将数据表内容导出为ex​​cel格式。我的代码适用于具有固定列数的数据表。但是如果它位于动态列中,它不会带来标题行。我已经浏览了更多网站,他们建议使用带标签的虚拟列。我也试过了。但是无法在excel中引入标头。其他excel内容正确显示。

我的代码是:

Xhtml代码:

public void postProcessXLS(Object document) 
{     HSSFWorkbook wb = (HSSFWorkbook) document;        
      HSSFSheet sheet = wb.getSheetAt(0);  
     for (Row row : sheet) {            
          for (Cell cell : row) {   
       System.out.println("cell value -->"+ cell.getStringCellValue());
       cell.setCellValue(cell.getStringCellValue().toUpperCase());                
        }       
    }
    }

并在我的Bean类中:

project

2 个答案:

答案 0 :(得分:0)

我遇到了同样的情况,我用了一个p:fileDownload来实现它: 在xhtml中:

<p:commandLink ajax="false">
     <p:graphicImage value="#{exportType.icon}" title="#{exportType.firstLangName}"/>
     <p:fileDownload value="#{customStatementBean.makeExportFile(exportType.exportTypeId)}"/>
</p:commandLink>

并在bean中:

    public StreamedContent makeExportFile(Long exportTypeId) {
        InputStream stream;
        try {
            stream = customStatementService.getExportFileInputStream(customStatementSO, customStatementResult, exportTypeId, getCurrentLanguage().toLowerCase());
        } catch (SabaBusinessException e) {
            saveError(e);
            return null;
        }
        return new DefaultStreamedContent(stream, getContentType(exportTypeId), customStatementService.makeFileName(customStatementSO, exportTypeId), "UTF-8");
    }

当然在customStatementService.getExportFileInputStream中我已根据需要使用POI创建了excel文件。

我在pom.xml中使用poi的依赖关系是这样的:

<dependency>
   <groupId>org.apache.poi</groupId>
   <artifactId>poi</artifactId>
   <version>3.9</version>
</dependency>

答案 1 :(得分:0)

我使用以下代码解决了这个问题。

HSSFWorkbook wb = (HSSFWorkbook) document;        
    HSSFSheet sheet = wb.getSheetAt(0);  
    /*HSSFRow header = sheet.getRow(1);
    HSSFCellStyle cellStyle = wb.createCellStyle();        
    for(int i=0; i < header.getPhysicalNumberOfCells();i++) {  
        HSSFCell cell = header.getCell(i);  

        cell.setCellStyle(cellStyle);  
    }  */
    HSSFRow row1 = sheet.createRow(0);
    //HSSFCell r1c1 = row1.createCell(1);
    //r1c1.setCellValue("dates");
    int columval = 1;
    for(int d=0; d<dates.size();d++)
    {
        System.out.println("dates-->"+dates.get(d).toString());
        HSSFCell r1c1 = row1.createCell(columval);
        r1c1.setCellValue(dates.get(d).toString());
        columval +=1;
    }
    for (Row row : sheet) {            
        for (Cell cell : row) {   
            System.out.println("cell value -->"+ cell.getStringCellValue());
            cell.setCellValue(cell.getStringCellValue().toUpperCase());                

            }       
        }