解决方案
3
13
同楼上,后台调用JSP显示时调用的接口获取数据,然后使用POI导出为Excel,并控制单元格样式
一些参考代码
一些参考代码
/**
* 创建组织架构导入结果文件
*
* @param listMessage
* @param fileName
* @param succSheetName
* @param failSheetName
*/
private void createImportResultFile(ArrayList<Message<String>> listMessage, String fileName, String succSheetName,
String failSheetName) {
boolean bCreateFile = createFile(fileName); // 创建文件
if (!bCreateFile) {
logger.info("创建组织架构导入结果文件失败 fileName=" + fileName);
return;
}
FileOutputStream fos = null;
try {
fos = new FileOutputStream(fileName);
HSSFWorkbook workBook = new HSSFWorkbook();
// 表头的单元格个数目
int cellNumber = OrganizationConstants.GET_DEPARTMENT_IMPORT_RESULT_TABLE_HEADER().length;
logger.info("填充导入数据成功excel开始");
// 创建成功导入数据sheet
HSSFSheet succsheet = workBook.createSheet(succSheetName);
// 填充成功导入sheet表头
createTableHeader(succsheet, getHeaderCellStyle(workBook),
OrganizationConstants.GET_DEPARTMENT_IMPORT_RESULT_TABLE_HEADER(),
OrganizationConstants.GET_DEPARTMENT_IMPORT_RESULT_TABLE_COLUMN_WIDTH(), cellNumber);
// 填充成功导入sheet表内容
createImportResultTableRow(succsheet, getDataCellStyle(workBook), listMessage, true);
logger.info("填充导入数据成功excel结束");
logger.info("填充导入数据失败excel开始");
// 创建导入失败数据sheet
HSSFSheet failsheet = workBook.createSheet(failSheetName);
// 填充导入失败sheet表头
createTableHeader(failsheet, getHeaderCellStyle(workBook),
OrganizationConstants.GET_DEPARTMENT_IMPORT_RESULT_TABLE_HEADER(),
OrganizationConstants.GET_DEPARTMENT_IMPORT_RESULT_TABLE_COLUMN_WIDTH(), cellNumber);
// 填充导入失败sheet表内容
createImportResultTableRow(failsheet, getDataCellStyle(workBook), listMessage, false);
logger.info("填充导入数据失败excel结束");
workBook.write(fos);
} catch (Exception e) {
e.printStackTrace();
logger.info("生成组织架构导入结果文件出错");
logger.info(e.getMessage());
} finally {
try {
fos.close();
} catch (Exception e) {
logger.info("生成组织架构导入结果文件出错");
logger.info(e.getMessage());
}
}
}
/**
* 创建文件
*
* @param fileName
* @return
*/
public boolean createFile(String filePath) {
try {
// 文件所在目录不存在则创建
int find = filePath.lastIndexOf(File.separator);
if (find != -1) {
String path = filePath.substring(0, find);
createFolder(path);
}
// 文件不存在则创建
File file = new File(filePath);
if (!file.exists()) {
return file.createNewFile();
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 创建表头
*
* @param sheet
* @param tableHeader
* @param cellNumber
*/
public void createTableHeader(HSSFSheet sheet, HSSFCellStyle cellStyle, String[] tableHeader,
int[] tableColumnWidth, int cellNumber) {
HSSFRow headerRow = sheet.createRow(0); // 创建表头行
for (int i = 0; i < cellNumber; i++) {
HSSFCell headerCell = headerRow.createCell(i);
headerCell.setCellValue(tableHeader[i]); // excel表格值
headerCell.setCellStyle(cellStyle); // excel表格样式
sheet.setColumnWidth(i, 256 * tableColumnWidth[i]); // in units of
// 1/256th of a
// character
// width
}
logger.info("表格头填充完毕");
}
private void createImportResultTableRow(HSSFSheet sheet, HSSFCellStyle cellStyle,
ArrayList<Message<String>> listMessage, boolean bSuccImport) {
int rowIndex = 1;
HSSFCell cell0, cell1, cell2;
int nCount = listMessage.size();
for (int i = 0; i < nCount; i++) {
Message<String> message = listMessage.get(i);
if (bSuccImport == message.getSuccess()) {
// 创建第rowIndex行
HSSFRow row = sheet.createRow(rowIndex);
// 填充第rowIndex行
cell0 = row.createCell(0);
int nRow = i + 1;
cell0.setCellValue("" + nRow);
cell0.setCellStyle(cellStyle);
cell1 = row.createCell(1);
cell1.setCellValue(message.getData());
cell1.setCellStyle(cellStyle);
cell2 = row.createCell(2);
cell2.setCellValue(message.getDescription());
cell2.setCellStyle(cellStyle);
// logger.info("第" + rowIndex + "行填充完毕");
rowIndex++;
}
}
logger.info("填充完毕");
}
6
你前端展示的数据都是在页面上面写死的吗?
3
数据哪儿来的其实不重要,你的难点应该是在于excel的导出,百度上面有很多例子
6
这叫POI了吧,导出导入成execl。
3
你解决了吗 本人现在任务和你 的一样 导出前台选中的数据。SSM框架 能给本人看看你怎么实现的吗 谢谢了
18
POI也是手动,怎么拆,怎么弄都由你本人弄,应该是导出里面最好的了