p:dataExporter不导出p:columnGroup的头文件

时间:2018-01-02 12:31:31

标签: jsf primefaces

我在标签中使用了p:columngroup。标题和值显示在网页中,但不会导出到Excel。值正在正确导出到excel,但导出后标题行为空。

以下是XHTML代码:

<ui:composition template="../templates/pwpMenuLayoutTemplate.xhtml"
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:p="http://primefaces.org/ui"
    xmlns:c="http://java.sun.com/jsp/jstl/core"
    xmlns:jc="http://jcoe.ford.com/jsfcore"
    xmlns:ui="http://java.sun.com/jsf/facelets">
    <f:metadata>
        <jc:preRenderView bean="#{profileCreationBean}" pageTitle="" />
    </f:metadata>
    <ui:define name="windowTitle">#{bundle['label.menu.attendance.summary.clockinout']}</ui:define>
    <h:head>
    <h:outputStylesheet library="css" name="styles.app.css"  />     
    </h:head>
    <ui:define name="content">
        <h:form id="asmReportForm"  prependId="false">
            <h1><h:outputFormat style="font-family: AntennaCond" value="#{bundle['label.menu.attendance.summary.clockinout']}">
            </h:outputFormat></h1>
            <p:messages id="messages" globalOnly="true" />
                      <h:commandLink
                            value="#{bundle['lable.dataExporter.exportExcel']}"
                            styleClass="excel-link" width="50" height="50">
                            <p:dataExporter target="clockinoutid" type="xls"
                                fileName="ClockinOutReport">
                            </p:dataExporter>
                      </h:commandLink>          

                <p:dataTable var="emp" id="clockinoutid" value="#{clockinOutReportBean.listEmpBO1}" >                   

                        <p:columnGroup type="header">
                        <p:row>
                        <p:column style="width:50px" rowspan="2">
                              <f:facet name="header">
                                 <h:outputText value="GPID" />
                            </f:facet>
                        </p:column>
                        <p:column style="width:100px" rowspan="2">
                         <f:facet name="header">
                                 <h:outputText value="Name" />
                            </f:facet>
                        </p:column>
                        <p:column style="width:50px" rowspan="2" >
                         <f:facet name="header">
                                 <h:outputText value="CDSID" />
                            </f:facet>
                        </p:column>
                        <p:column style="width:50px" rowspan="2" >
                        <f:facet name="header">
                                 <h:outputText value="Designation" />
                            </f:facet>
                         </p:column>
                        <c:forEach items="#{clockinOutReportBean.dates}" var="id">
                            <p:column style="width:100px" colspan="2" >
                            <f:facet name="header">
                                 <h:outputText value="#{id}" />
                            </f:facet>
                            </p:column>
                        </c:forEach>
                        <p:column style="width:50px" rowspan="2">
                        <f:facet name="header">
                                 <h:outputText value="Team Leader" />
                            </f:facet>
                        </p:column>
                        <p:column style="width:50px" rowspan="2">
                        <f:facet name="header">
                                 <h:outputText value="Process Coach" />
                            </f:facet>
                        </p:column>
                        <p:column style="width:50px" rowspan="2">
                            <f:facet name="header">
                                 <h:outputText value="Team Manager" />
                            </f:facet>
                         </p:column>
                        <p:column style="width:50px" rowspan="2" >
                        <f:facet name="header">
                                 <h:outputText value="Area Manager" />
                            </f:facet>
                        </p:column>
                        <p:column style="width:150px" colspan = "#{clockinOutReportBean.leavecount}">
                        <f:facet name="header">
                                 <h:outputText value="Leaves" />
                            </f:facet>
                        </p:column>
                        </p:row>

                        <p:row>
                            <c:forEach items="#{clockinOutReportBean.dates}" var="id">
                                <p:column style="width:25px" rowspan="1" >
                                <f:facet name="header">
                                 <h:outputText value="In" />
                            </f:facet>
                            </p:column>
                                <p:column style="width:25px" rowspan="1" >
                                <f:facet name="header">
                                 <h:outputText value="Out" />
                            </f:facet>
                            </p:column>
                            </c:forEach>
                            <c:forEach items="#{clockinOutReportBean.leaveNames}" var="id">
                                <p:column style="width:25px" rowspan="1" >
                                <f:facet name="header">
                                 <h:outputText value="#{id}" />
                            </f:facet>
                            </p:column>
                            </c:forEach>
                         </p:row>

                        </p:columnGroup>


                        <p:column>
                              <h:outputText value="#{emp.gpid}" />
                        </p:column>

                        <p:column>
                                 <h:outputText value="#{emp.name}" />
                        </p:column>

                        <p:column>
                                 <h:outputText value="#{emp.cdsid}" />
                         </p:column>

                        <p:column>
                                 <h:outputText value="#{emp.empPositionTitle}" />
                         </p:column> 

                         <c:forEach items="#{clockinOutReportBean.dates}" var="id">
                            <p:column>
                                <h:outputText value="#{emp.swipelist[id].swipeinTime}" />
                            </p:column>
                            <p:column>
                                <h:outputText value="#{emp.swipelist[id].swipeoutTime}" />
                            </p:column>
                        </c:forEach>

                         <p:column>
                                 <h:outputText value="#{emp.teamLeader}" />
                         </p:column> 

                         <p:column>
                                 <h:outputText value="#{emp.processCoach}" />
                         </p:column> 

                         <p:column>
                                 <h:outputText value="#{emp.teamManager}" />
                         </p:column> 

                         <p:column>
                                 <h:outputText value="#{emp.areaManager}" />
                         </p:column> 

                        <p:columns var="id" value="#{clockinOutReportBean.leaveNames}">
                                <h:outputText value="#{emp.leaveList[id].value}" />
                        </p:columns>

                    </p:dataTable>      


        </h:form>
    </ui:define>
</ui:composition>

所有数据都正确导出。但是在Excel中看不到标题。有人可以帮忙吗?

3 个答案:

答案 0 :(得分:0)

一种解决方法是添加带有style="display: none;"的列,以避免在屏幕上重复该列,但是为了导出,虽然没有显示columnGroup,但带有display: none的列却显示。

答案 1 :(得分:0)

您可以通过向数据区域中的列添加另一个headerText属性来解决此问题。在标题部分和数据部分中,您将拥有相同的属性。

看起来像这样:

<p:dataTable .. >
  <p:columnGroup type="header"> 
     <p:row>
     <p:column style="width:50px" rowspan="2">
         <f:facet name="header">
              <h:outputText value="GPID" />
          </f:facet>
      </p:column>
    ......
  </p:columnGroup>
  <!-- Data area -->
  <p:column headerText="GPID">
    <h:outputText value="#{emp.gpid}" />
  </p:column>

答案 2 :(得分:-1)

如果您知道Apache POI工作簿的自定义布局(默认情况下未提供p:dataExporter},则可以使用postProcessor属性。

<p:dataExporter postProcessor="#{backendBean.postProcessXLS}" type="xls" target="tableId" fileName="x"  />

然后以下面的方式将此postProcessXLS方法添加到后端bean。

 public void postProcessXLS(Object document) {
    HSSFWorkbook wb = (HSSFWorkbook) document;
    HSSFSheet sheet = wb.getSheetAt(0);
    // TO-DO: change layout of the sheet or add or remove any sheet to workbook
 }
相关问题