在我的另一个应用程序中,我有一个带有动态列的数据表。我的代码应该将数据表内容导出为excel格式。我的代码适用于具有固定列数的数据表。但是如果它位于动态列中,它不会带来标题行。我已经浏览了更多网站,他们建议使用带标签的虚拟列。我也试过了。但是无法在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
答案 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());
}
}