运用jxl导出Excel
开发时出现的问题:
1、尽量减少数据库的访问;
2、注意一些细节问题(变量方法的命名问题等)
jxl导出excel还是很简单的,设置表单样式,设置表头,插入数据即可。不再过多赘述
public ActionForward exportBudgetList(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response) throws Exception{
final int deptId = NumberUtils.toInt(request.getParameter("deptId"));
final int feeTypeId = NumberUtils.toInt(request.getParameter("feeTypeId"));
final int purposeId = NumberUtils.toInt(request.getParameter("purposeId"));
int year=NumberUtils.toInt(request.getParameter("year"));
final int projId = NumberUtils.toInt(request.getParameter("projectId"));
final String dayType = StringUtils.trimToEmpty(request.getParameter("feeDayTypeId"));
FeeDayType feeTimeTypeEnum = null;
if(StringUtils.isNotBlank(dayType)){
feeTimeTypeEnum = FeeDayType.valueOf(dayType);
}
String sheetName =year+"Budget";
response.setHeader("Content-disposition", "attachment; filename=budgetList.xls");
response.setContentType("application/msexcel");
ServletOutputStream out = response.getOutputStream();
WritableSheet sheet = null;
WritableWorkbook wwb = null;
wwb = Workbook.createWorkbook(out);
sheet = wwb.createSheet(sheetName, 0);
//创建表头样式
WritableFont wfc = new WritableFont(WritableFont.ARIAL,12,WritableFont.BOLD,false,UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.BLACK);
WritableCellFormat headerFmt = new WritableCellFormat(wfc);
headerFmt.setAlignment(Alignment.CENTRE);
headerFmt.setBorder(jxl.format.Border.ALL,jxl.format.BorderLineStyle.THIN);
headerFmt.setBackground(Colour.BRIGHT_GREEN);
WritableCellFormat bodyFmt = new WritableCellFormat(wfc);
bodyFmt.setBorder(jxl.format.Border.ALL,jxl.format.BorderLineStyle.THIN);
bodyFmt.setFont(new WritableFont(WritableFont.ARIAL,10,WritableFont.NO_BOLD,false,UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.BLACK));
//填写表头
int colNum=0;
int rowNum=0;
String[] headers={"部门名称","费用类型","项目","用途","发生时间"};
for(int i=0;i<headers.length;i++){
sheet.addCell(new Label(colNum,rowNum,headers[i],headerFmt));
sheet.setColumnView(colNum, 12);
colNum++;
}
for(int mount=1;mount<13;mount++) {
String label=mount+"月";
sheet.addCell(new Label(colNum,rowNum,label,headerFmt));
sheet.setColumnView(colNum, 12);
colNum++;
}
List<DeptBudget> deptBudgetList = applyService.findDeptBudgets(deptId, feeTypeId, projId, purposeId, feeTimeTypeEnum, year);
//插入数据
if(deptBudgetList!=null && !deptBudgetList.isEmpty()){
for(DeptBudget budget: deptBudgetList){
rowNum++;
sheet.setRowView(rowNum, 400);
int colIndex= 0;
sheet.addCell(new Label(colIndex++,rowNum,String.valueOf(deptService.getDepartmentById(budget.getDeptId()).getDeptName()),bodyFmt));
sheet.addCell(new Label(colIndex++,rowNum,String.valueOf(applyService.getFeeTypeById(budget.getFeeTypeId()).getTypeName()),bodyFmt));
Project proj = applyService.getProjectById(budget.getProjId());
if(proj==null){
sheet.addCell(new Label(colIndex++,rowNum,StringUtils.EMPTY,bodyFmt));
}else{
sheet.addCell(new Label(colIndex++,rowNum,String.valueOf(proj.getPrjtName()),bodyFmt));
}
FeePurpose purpose = applyService.getFeePurposeById(budget.getPurposeId());
if(purpose ==null){
sheet.addCell(new Label(colIndex++,rowNum,StringUtils.EMPTY,bodyFmt));
}else{
sheet.addCell(new Label(colIndex++,rowNum,String.valueOf(purpose.getFeePurposeName()),bodyFmt));
}
if(budget.getDayType()==null){
sheet.addCell(new Label(colIndex++,rowNum,StringUtils.EMPTY,bodyFmt));
}else{
sheet.addCell(new Label(colIndex++,rowNum,String.valueOf(budget.getDayType().getStateName()),bodyFmt));
}
//填写预算
List<MonthBudget> mbList = budget.getBudgetList();
if(mbList!=null && !mbList.isEmpty()) {
int startColNum = headers.length;
for(MonthBudget mBudget : mbList) {
double amt = NumberUtils.toDouble(CustomFunctions.renderSalaryAmount(mBudget.getBudget()));
sheet.addCell(new Label(startColNum++,rowNum,String.valueOf(amt),bodyFmt));
}
}
}
}
wwb.write();
wwb.close();
return null;
}