我的应用程序中有很多数据表(用作自定义标签),并且可以使用dataExporter函数将所有数据表导出到一个Excel文件中。我的问题是,包含数字的列在前端进行了格式化(例如:124284,4),并且如果将它们导出到Excel中,则不能将它们作为数字处理(例如摘要)。那么...如何才能仅从这些列中删除空格,这些列在postProcess函数中仅包含数字?这有可能吗?
我找到了这个postProcessor函数,但这不仅转换了数字行,而且转换了所有内容:
public void postProcessXLS(Object document) {
HSSFWorkbook wb = (HSSFWorkbook) document;
HSSFSheet sheet = wb.getSheetAt(0);
HSSFRow header = sheet.getRow(0);
Iterator<Row> rowIterator = sheet.iterator();
if (rowIterator.hasNext()) {
rowIterator.next();
}
while (rowIterator.hasNext()) {
Row row = rowIterator.next();
Iterator<Cell> cellIterator = row.cellIterator();
while (cellIterator.hasNext()) {
Cell cell = cellIterator.next();
if (cell.getColumnIndex() > 1) {
if (!cell.getStringCellValue().isEmpty()) {
cell.setCellValue(Double.valueOf(cell.getStringCellValue().replace("'", "")));
}
}
}
}
}
这是我的dataExporter按钮:
<h:commandLink style="float:right">
<p:graphicImage name="/images/excel.png" width="24"/>
<p:dataExporter type="xls" target="#{id}" fileName="list" />
</h:commandLink>
预期结果:例如在Excel中将98923,5导出为98923,5。所有其他字符串将保持不变。
答案 0 :(得分:2)
最佳选择包括扩展org.primefaces.component.export.ExcelExporter
和覆盖exportValue
方法以应用您的自定义。在那里,您可以完全访问输出组件。将您的自定义导出程序扩展实例提供给p:dataExporter
customExporter
属性。
一个例子可能像这样:
<h:form>
<h:commandLink title="hejjj!">
Export to XLS
<p:dataExporter type="xls" customExporter="#{myBean.customExporter}"
target="tbl" fileName="anyFilename" />
</h:commandLink>
<p:dataTable id="tbl" value="#{myBean.rows}" var="row">
<p:column headerText="Formatted Numbers with Spaces">
<h:outputText value="#{row.number}">
<f:converter .../>
<f:attribute name="isFormattedNumber" value="1" />
</h:outputText>
</p:column>
</p:dataTable>
</h:form>
请注意,添加到<f:attribute name="isFormattedNumber" value="1" />
的{{1}}有助于在使用以下h:outputText
进行导出时区分组件:
CustomExcelExporter
MyBean只是为了显示导出对象的创建位置:
package my.package;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import org.primefaces.component.export.ExcelExporter;
public class CustomExcelExporter extends ExcelExporter {
@Override
protected String exportValue(FacesContext context, UIComponent component) {
String exportedValue = super.exportValue(context, component);
if (component.getAttributes().containsKey("isFormattedNumber")) {
return exportedValue.replace(" ", "");
} else {
return exportedValue;
}
}
}
另一种选择是通过向所有相关列添加自定义custom export属性来尝试exportFunction
功能。