我在标签中使用了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中看不到标题。有人可以帮忙吗?
答案 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
}