对上一篇Java Web 中的excel的导出的方法改善和一些局限性的介绍
public static HSSFWorkbook fillExcelDataWithTemplate(List<List> list, String[] titles, String sheetname) {
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet(sheetname);//名称
sheet.setDefaultColumnWidth(18);
HSSFRow row0 = sheet.createRow(0);
int count = 0;
for (int i = 0; i < titles.length; i++) {
if (isNumeric(titles[i])) {
count++;
i++;
}
if (i >= titles.length) {
break;
}
row0.createCell(i - count).setCellValue(titles[i]);
}
int rowIndex = 1;
HSSFRow row;
for (List list1 : list) {
row = sheet.createRow(rowIndex);
rowIndex++;
int count1 = 0;
int count2 = 0;
for (int i = 0; i < titles.length; i++) {
if (isNumeric(titles[i])) {
count1+= (Integer.parseInt(titles[i])-1);
count2++;
i++;
}
if (i >= titles.length) {
break;
}
row.createCell(i - count2).setCellValue((String) list1.get(i+count1));
}
}
return wb;
}
修改的地方
上一篇中介绍了如果实体类中的一些字段不想要导出在excel中,可以在titles中对应的位置设置为1,但是,如果实体类中有很多不与要导出的字段,这时候就会筛选出来要导出的字段就会很繁琐。这时候为了简化操作,就可以通过一下方法解决;
1、重新建一个实体类,只有需要导出的字段,顺序也可以自己设计
2、如果原实体类中有很多连续且不需要的字段,那么可以直接在titles中写上数字n,n就代表该位置有n个连续的不需要输出的字段,具体修改如上代码(结核我前一篇中的代码分析更容易看懂)
List<List> list = iVehicleDetailService.DayCountDataListExcelOut(request,vehicleid,startTime,endTime);
String sheetname = "日工作统计一览表";
String[] titles = {"2","上传时间","统计时间","2","点火次数","15","出动时刻","收工时间","当日工作时间","总工作时间"};
HSSFWorkbook wb = OutExcel.fillExcelDataWithTemplate(list,titles,sheetname);
ExcelUtil.export(response,wb,"日工作统计一览表.xls");
上面是控制器中的一部分代码,希望可以帮助到大家。