参数讲解:
1.第一个参数:第一行显示的信息(如 姓名 年龄 升高 体重 等等)
2.第二个参数:为要替换进去的数据(比如 name age hight weight ..)
3.第三个参数:为从数据库中查出的数据
4.第四个参数:为文件名可以随便起
public static<T> void exportExcel(List<String> headAttribute,List<String> bodyAttribute,List<T> bodyData,String fileName){
MutiStyleExcelWrite mew = new MutiStyleExcelWrite(); ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletResponse response = attributes.getResponse(); response.reset(); response.setCharacterEncoding("utf-8"); response.setHeader("Content-Disposition", "attachment;fileName="+fileName+System.currentTimeMillis()+".xls"); response.setContentType("application/shlnd.ms-excel"); response.setHeader("Pragma", "no-cache"); response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", 0); try{ mew.createExcel(response.getOutputStream(),bodyData, bodyAttribute, headAttribute,fileName, fileName); }catch(Exception e){ throw new RuntimeException(e); }}
import jxl.Workbook; import jxl.write.Label; import jxl.write.Number; import jxl.write.WritableCellFormat; import jxl.write.WritableFont; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; import jxl.write.WriteException; import jxl.write.biff.RowsExceededException; public class MutiStyleExcelWrite { public <T> void createExcel(OutputStream os,List<T> objList, List<String> propOrderList, List<String> tableHeadList, String excelName, String sheetName) throws WriteException,IOException { //创建工作薄 WritableWorkbook workbook = Workbook.createWorkbook(os); //创建新的一页 WritableSheet sheet = workbook.createSheet("First Sheet", 0); //构造表头 createExcelHead(sheet,tableHeadList); WritableFont boldNumber = new WritableFont(WritableFont.ARIAL,10,WritableFont.BOLD);//黑体 WritableCellFormat boldNumberFormate = new WritableCellFormat(boldNumber); if(objList!=null&&!"".equals(objList)){ for (int objNum = 0; objNum < objList.size(); objNum++) { for (int cellNum = 0; cellNum < propOrderList.size(); cellNum++) { // 将属性的首字母大写 String propertyName = propOrderList.get(cellNum).replaceFirst( propOrderList.get(cellNum).substring(0, 1), propOrderList.get(cellNum).substring(0, 1) .toUpperCase()); //设置单元格宽度 sheet.setColumnView(cellNum+1,15); try { // 如果type是类类型,则前面包含"class ",后面跟类名 Method m = objList.get(objNum).getClass() .getMethod("get" + propertyName); // 调用getter方法获取属性值 Object property = m.invoke(objList.get(objNum)); //整形数据 if (property instanceof Integer ) { Number ints = new Number(cellNum,1+objNum,(Integer)property); sheet.addCell(ints); }else if(property instanceof Float){ Number ints = new Number(cellNum,1+objNum,(Float)property); sheet.addCell(ints); }else if(property instanceof Double){ Number ints = new Number(cellNum,1+objNum,(Double)property); sheet.addCell(ints); }else if(property instanceof Long){ Number ints = new Number(cellNum,1+objNum,(Long)property); sheet.addCell(ints); }else if (property instanceof Date) { String strdate = TimeHelper.dateTimeToStr2((Date) property, "yyyy-MM-dd HH:mm:ss") ; Label example = new Label(cellNum,1+objNum,strdate); sheet.addCell(example); } else{ Label example = new Label(cellNum,1+objNum,(String)property,boldNumberFormate); sheet.addCell(example); } } catch (Exception e) { log.error("生成excel解析数据出错:"+ e); } } } } //把创建的内容写入到输出流中,并关闭输出流 workbook.write(); workbook.close(); os.close(); }
public void createExcelHead( WritableSheet sheet, List<String> tableHeadList) throws RowsExceededException, WriteException { for (int cellNum = 0; cellNum < tableHeadList.size(); cellNum++) { Label floats = new Label(cellNum,0,tableHeadList.get(cellNum)); sheet.addCell(floats); } } }
