我现在想通过java程序导出一个Excel报表,我可以传一个放有数据的list集合进去然后导出。报表效果如附件所示:
请各位朋友给点意见。最好给出代码,分不多,还是希望大家多提建议,谢谢了!
去我博客 ,有JXL操作EXCEL 包括样式、列宽、高等操作
[code="java"]
//往往Excel写数据
public final static int exportAdviseByCreateTime(final String tempFileName,final Map resultMap){
int result=SysConstant.RESULT_CODE_UNKNOWN_ERROR;
List totalList;
List detailList;
if(resultMap == null || resultMap.isEmpty()){
return result;
}else{
detailList = (List)resultMap.get("detailList");
totalList = (List)resultMap.get("totalList");
}
try {
int listSize=detailList.size();//list数据大小
long maxSheetCount=1;//获得最大excel文件最多要创建多少个sheet;
if(listSize%(EXCEL_MAX_ROW_EACH_SHEET-1)==0){//减1是因为字段名称占一行
maxSheetCount=listSize/(EXCEL_MAX_ROW_EACH_SHEET-1);
}else{
maxSheetCount=listSize/(EXCEL_MAX_ROW_EACH_SHEET-1)+1;
}
//创建临时文件
File tempFile = new File(tempFileName);
//将excel文件绑定到临时文件
WritableWorkbook book= Workbook.createWorkbook(tempFile);
WritableSheet sheet=null;//每个sheet
Map map = null;
//循环每个sheet
for(int sheetIndex=0;sheetIndex<maxSheetCount;sheetIndex++){//sheetIndex表示sheet索引
int sheetRowIndex = 1; //每个sheet的行索引。都是从第1行开始(第0行开始计数),第0行是列头
//如果sheetIndex数大于默认数创建的最大sheet数
sheet = book.createSheet("Sheet1",0);
sheet.addCell(new Label(0, 0, "时间"));//Label(列,行,值)
sheet.addCell(new Label(1, 0, "工单总量"));
sheet.addCell(new Label(2, 0, "需要反馈"));
sheet.addCell(new Label(3, 0, "不需反馈"));
sheet.addCell(new Label(4, 0, "采集成功"));
sheet.addCell(new Label(5, 0, "采集失败"));
sheet.addCell(new Label(6, 0, "已完成"));
sheet.addCell(new Label(7, 0, "未完成"));
//明细
for(int i=0;i<listSize;i++){
if(sheetRowIndex%EXCEL_MAX_ROW_EACH_SHEET==0){
break;
}
map = (Map)detailList.get(i);
if(map != null && !map.isEmpty()){
sheet.addCell(new Label(0,i+1,map.get("CREATETIME").toString())); //时间
sheet.addCell(new Label(1,i+1,map.get("TOTAL").toString())); //工单总量
sheet.addCell(new Label(2,i+1,map.get("NEEDFEEDBACK").toString())); //需要反馈
sheet.addCell(new Label(3,i+1,map.get("UNNEEDFEEDBACK").toString())); //不需反馈
sheet.addCell(new Label(4,i+1,map.get("SUCCESS").toString())); //采集成功
sheet.addCell(new Label(5,i+1,map.get("FAIL").toString())); // 采集失败
sheet.addCell(new Label(6,i+1,map.get("FINISHED").toString())); //已完成
sheet.addCell(new Label(7,i+1,map.get("UNFINISHED").toString())); //未完成
}
sheetRowIndex++; //Excel换Sheet控制
//到了65535,Excel换sheet
}
//合计
map = (Map)totalList.get(0);
if(map != null && !map.isEmpty()){
sheet.addCell(new Label(0,listSize + 1,"合计")); //时间
sheet.addCell(new Label(1,listSize + 1,map.get("TOTAL").toString())); //工单总量
sheet.addCell(new Label(2,listSize + 1,map.get("NEEDFEEDBACK").toString())); //需要反馈
sheet.addCell(new Label(3,listSize + 1,map.get("UNNEEDFEEDBACK").toString())); //不需反馈
sheet.addCell(new Label(4,listSize + 1,map.get("SUCCESS").toString())); //采集成功
sheet.addCell(new Label(5,listSize + 1,map.get("FAIL").toString())); // 采集失败
sheet.addCell(new Label(6,listSize + 1,map.get("FINISHED").toString())); //已完成
sheet.addCell(new Label(7,listSize + 1,map.get("UNFINISHED").toString())); //未完成
}
}
book.write();
book.close();
result=SysConstant.RESULT_CODE_SUCCESS;
} catch (RowsExceededException e) {
System.out.println(e);
e.printStackTrace();
} catch (WriteException e) {
System.out.println(e);
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
System.out.println(e);
} catch (Exception e) {
e.printStackTrace();
System.out.println(e);
}
return result;
}
//把文件导到客户端
public static final void downloadFileToClient(
final HttpServletResponse httpServletResponse,
final String downloadFileName,
final String format,
final boolean isDelete){
try {
//构造下载文件
File downloadFile=new File(downloadFileName);
/////////////////设置下载文件信息//////////////////
long fileSize = downloadFile.length();//文件大小
httpServletResponse.addHeader("content-type",format);//设置输出格式
httpServletResponse.addHeader("Content-Disposition", "attachment; filename="+downloadFile.getName());
httpServletResponse.addHeader("content-length", Long.toString(fileSize));
///////////////向客户端写入文件fin ///////////////
java.io.FileInputStream fin= new java.io.FileInputStream(downloadFile);
final int bufferSize=1024;
byte[] b = new byte[bufferSize];
while((fin.read(b)) > 0) {
httpServletResponse.getOutputStream().write(b);
}
fin.close();
//将源文件删除
if(isDelete){
downloadFile.delete();
}
} catch (FileNotFoundException e1) {
log.error("FileNotFoundException happened!");
//throw new FsgprsException(10008);
} catch(IOException e2) {
log.error("IOException happened!");
} catch(Exception e){
log.error("Exception happened!");
}
}
[/code]
其实楼主可以选择apache的POI框架,操作excel比较方便的。网上的资料也比较多,看官方文档也很容易学会的。
poi吧,看官方的文档复制改改就可以了
poi 和jxl都可以,自己去官方下载