导出到带有标题的动态列的excel



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

我的代码是:

Xhtml代码:

<p:dataTable id="rosterviewtab" var="data" value="#{dtRosterView.rostertab}" >
    <p:columnGroup type="header">
        <p:row>
            <p:column headerText="" />
    <p:column style="display:none">
            <f:facet name="header"> #{dtRosterView.dates}   </f:facet>
    </p:column>
            <ui:repeat value="#{dtRosterView.dates}" var="dates">
               <p:column headerText="#{dates}" exportable="false" />                
            </ui:repeat>
        </p:row>
    </p:columnGroup>   
      <p:column> 
        <h:outputText value="#{data.slot_noresources}" />
      </p:column>    
     <p:column>
        <h:outputText value="#{data.datecol1}" />
    </p:column>     
     <p:column>
        <h:outputText value="#{data.datecol2}" />
    </p:column> 
    </p:dataTable>
    <h:panelGrid columns="2" cellpadding="5">
    <p:commandButton value="Export To Excel" style="font-size:11px;width:120px;height:40px" immediate="true" ajax="false" >          
    <p:dataExporter type="xls" target="rosterviewtab" fileName="RosterView" postProcessor="#{dtRosterView.postProcessXLS}" update="@form"  />
    </p:commandButton>

在我的Bean课堂上:

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());                
        }       
    }
    }

我遇到了同样的情况,我使用了p:fileDownload,并实现了如下:在xhtml中:

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

在豆中:

    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");
    }

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

我在pom.xml中对poi使用的依赖项如下:

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

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

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());                
            }       
        }

相关内容

  • 没有找到相关文章

最新更新