/** * 系统数据导出Excel 生成器 * @version 1.0 */ package com.tranb.common.tools; import java.io.OutputStream; import java.util.ArrayList; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFFont; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.util.HSSFColor; public class ExcelFileGenerator { private final int SPLIT_COUNT = 60000; //Excel每一个工做簿的行数 private ArrayList<String> fieldName = null; //excel标题数据集 private ArrayList<ArrayList<String>> fieldData = null; //excel数据内容 private HSSFWorkbook workBook = null; /** * 构造器 * @param fieldName 结果集的字段名 * @param data */ public ExcelFileGenerator(ArrayList<String> fieldName, ArrayList<ArrayList<String>> fieldData) { this.fieldName = fieldName; this.fieldData = fieldData; } /** * 建立HSSFWorkbook对象 * @return HSSFWorkbook */ public HSSFWorkbook createWorkbook() { workBook = new HSSFWorkbook();//建立一个工做薄对象 int rows = fieldData.size();//总的记录数 int sheetNum = 0; //指定sheet的页数 if (rows % SPLIT_COUNT == 0) { sheetNum = rows / SPLIT_COUNT; } else { sheetNum = rows / SPLIT_COUNT + 1; } for (int i = 1; i <= sheetNum; i++) {//循环2个sheet的值 HSSFSheet sheet = workBook.createSheet("Page " + i);//使用workbook对象建立sheet对象 HSSFRow headRow = sheet.createRow((short) 0); //建立行,0表示第一行(本例是excel的标题) for (int j = 0; j < fieldName.size(); j++) {//循环excel的标题 HSSFCell cell = headRow.createCell( j);//使用行对象建立列对象,0表示第1列 /**************对标题添加样式begin********************/ //设置列的宽度/ sheet.setColumnWidth(j, 6000); HSSFCellStyle cellStyle = workBook.createCellStyle();//建立列的样式对象 HSSFFont font = workBook.createFont();//建立字体对象 //字体加粗 font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); //字体颜色变红 font.setColor(HSSFColor.RED.index); //若是font中存在设置后的字体,并放置到cellStyle对象中,此时该单元格中就具备了样式字体 cellStyle.setFont(font); /**************对标题添加样式end********************/ //添加样式 cell.setCellType(HSSFCell.CELL_TYPE_STRING); if(fieldName.get(j) != null){ //将建立好的样式放置到对应的单元格中 cell.setCellStyle(cellStyle); cell.setCellValue((String) fieldName.get(j));//为标题中的单元格设置值 }else{ cell.setCellValue("-"); } } //分页处理excel的数据,遍历全部的结果 for (int k = 0; k < (rows < SPLIT_COUNT ? rows : SPLIT_COUNT); k++) { if (((i - 1) * SPLIT_COUNT + k) >= rows)//若是数据超出总的记录数的时候,就退出循环 break; HSSFRow row = sheet.createRow( k + 1);//建立1行 //分页处理,获取每页的结果集,并将数据内容放入excel单元格 ArrayList<String> rowList = (ArrayList<String>) fieldData.get((i - 1) * SPLIT_COUNT + k); for (int n = 0; n < rowList.size(); n++) {//遍历某一行的结果 HSSFCell cell = row.createCell( n);//使用行建立列对象 if(rowList.get(n) != null){ cell.setCellValue((String) rowList.get(n).toString()); }else{ cell.setCellValue(""); } } } } return workBook; } public void expordExcel(OutputStream os) throws Exception { workBook = createWorkbook(); workBook.write(os);//将excel中的数据写到输出流中,用于文件的输出 os.close(); } } /** * 用户数据导出模块- 数据导出 */ public String exportData(ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws Exception { String startTime = request.getParameter("startTime"); String endTime = request.getParameter("endTime"); String status = request.getParameter("status"); String uids = request.getParameter("uids"); ArrayList<String> fieldName = new ArrayList<String>(); fieldName.add("uid"); fieldName.add("姓名"); fieldName.add("行业"); fieldName.add("供应链身份"); fieldName.add("帐号"); fieldName.add("注册时间"); //fieldName.add("最后登陆时间"); fieldName.add("最后登陆日期"); fieldName.add("当前版本"); fieldName.add("帐号状态"); fieldName.add("会员等级"); fieldName.add("性别"); fieldName.add("城市"); fieldName.add("电话号码"); fieldName.add("发布采购次数"); fieldName.add("被报价总数"); fieldName.add("报价数"); fieldName.add("动态数"); fieldName.add("商品数"); ArrayList<ArrayList<String>> fieldData = new ArrayList<ArrayList<String>>(); String headFileName=""; JSONObject jsonDate=null; if("0".equals(status)){ jsonDate = DaoFactory.getUserInfoDao().getpurchuse_user_report(true,null, uids, startTime, endTime); headFileName="按发布采购统计"; }else if("1".equals(status)){ jsonDate=DaoFactory.getUserInfoDao().getproduct_user_report(true,null, uids, startTime, endTime); headFileName="按发布商品统计"; }else if("2".equals(status)){ jsonDate=DaoFactory.getUserInfoDao().getnewCast_user_report(true,null, uids, startTime, endTime); headFileName="按发布动态统计"; }else if("3".equals(status)){ jsonDate = DaoFactory.getUserInfoDao().getLastActive_user_report(true,null, uids, startTime, endTime); headFileName="按最后登陆时间统计"; }else if("-1".equals(status)){ jsonDate = DaoFactory.getUserInfoDao().getUid_report(true,null, uids, startTime, endTime); headFileName="按UID统计"; } List<JSONObject> dataList= (List<JSONObject>) jsonDate.get("rows"); if(dataList!=null&&dataList.size()>0){ for (JSONObject jsonObject : dataList) { ArrayList<String> temp = new ArrayList<>(); temp.add(jsonObject.getString("uid")); temp.add(jsonObject.has("chineseName")?jsonObject.getString("chineseName"):""); temp.add(jsonObject.has("personIUCode")?jsonObject.getString("personIUCode"):""); temp.add(jsonObject.has("identityType")?jsonObject.getString("identityType"):""); temp.add(jsonObject.has("account")?jsonObject.getString("account"):""); temp.add(jsonObject.has("registerTime")?jsonObject.getString("registerTime"):""); //temp.add(jsonObject.has("lastActive")?jsonObject.getString("lastActive"):""); temp.add(jsonObject.has("logDate")?jsonObject.getString("logDate"):""); temp.add(jsonObject.has("curVersion")?jsonObject.getString("curVersion"):""); temp.add(jsonObject.has("type")?jsonObject.getString("type"):""); String member=""; if(jsonObject.has("member")){ String memberStr = jsonObject.getString("member"); if("0".equals(memberStr)){ member="非会员"; }else if("1".equals(memberStr)){ member="赠送会员"; }else if("2".equals(memberStr)){ member="正式会员"; } temp.add(member); }else{ temp.add(member); } temp.add(jsonObject.has("sex")?(jsonObject.getString("sex").equals("1")?"男":"女"):""); temp.add(jsonObject.has("city")?jsonObject.getString("city"):""); temp.add(jsonObject.has("mobilePhone")?jsonObject.getString("mobilePhone"):""); temp.add(jsonObject.has("purchaseCount")?jsonObject.getString("purchaseCount"):""); temp.add(jsonObject.has("bidSumCount")?jsonObject.getString("bidSumCount"):""); temp.add(jsonObject.has("bidSum")?jsonObject.getString("bidSum"):""); temp.add(jsonObject.has("castCount")?jsonObject.getString("castCount"):""); temp.add(jsonObject.has("productCount")?jsonObject.getString("productCount"):""); fieldData.add(temp); } } ExcelFileGenerator excelFileGenerator = new ExcelFileGenerator(fieldName,fieldData); OutputStream os = response.getOutputStream(); response.reset();//导出excel建议加上重置输出流 String fileName = headFileName+"("+new SimpleDateFormat("yyyy-MM-dd:HH:mm:ss").format(new Date())+")"; fileName = new String(fileName.getBytes("gbk"),"iso-8859-1"); response.setContentType("application/msexcel"); response.setHeader("Content-disposition", "attachment;filename="+fileName+".xls"); response.setBufferSize(1024); //导出excel的操做 excelFileGenerator.expordExcel(os); return null; }