java 导出excel表格(.xlsx)

来源:互联网 发布:神曲 译本知乎 编辑:程序博客网 时间:2024/06/17 14:11
 jsp 页面首先需要引入jquery.redirect.js<button onclick="exportExcel();">导出</button>  js页面  function exportExcel(){var param = {"userId":userId};$.redirect(path+ '/exportExcel.action',param);}  后台:  public class BjUserVO { private String username; private String sex ; private String age; private String department;// 单位 private String part;// 部门   }  //需要注意的是headers 里面的字段的先后顺序要和BjUserVO里面的先后顺序保持一致 public void exportExcel() throws Exception {        List<BjUserVO> list = new ArrayList<BjUserVO>();HttpServletResponse response = ServletActionContext.getResponse();list = bjSrvService.queryBjUserDetail(userId);ExportAndImportCommonExcel<BjUserVO> ee= new ExportAndImportCommonExcel<BjUserVO>();          String[] headers = { "姓名", "性别", "年龄", "单位" ,"部门"};          String fileName = "人员详情表";              ee.exportExcel(headers,list,fileName,response);}   //下面是导出的共用的模板(要是有样式的不统一的话就需要根据需求做相应的变化)public class ExportAndImportCommonExcel<T> {/** * @Title: exportExcel * @Description: 导出excel * @Return: void * @throws  * @param object     实体 * @param headers    标题 * @param bjSrvNotifyList       数据 * @param fileName   文件名称 * @param response   输出 */ @SuppressWarnings({ "rawtypes", "unchecked" })public void exportExcel(String[] headers,List list, String fileName,HttpServletResponse response) {          // 声明一个工作薄          XSSFWorkbook workbook = new XSSFWorkbook();          // 生成一个表格          XSSFSheet sheet = workbook.createSheet(fileName);          // 设置表格默认列宽度为15个字节          sheet.setDefaultColumnWidth((short) 20);         // 产生表格标题行          XSSFRow row = sheet.createRow(0);          for (short i = 0; i < headers.length; i++) {              XSSFCell cell = row.createCell(i);              XSSFRichTextString text = new XSSFRichTextString(headers[i]);              cell.setCellValue(text);          }          try {              // 遍历集合数据,产生数据行              Iterator<T> it =  (Iterator<T>) list.iterator();              int index = 0;              while (it.hasNext()) {                  index++;                  row = sheet.createRow(index);                  T t = (T) it.next();                 // 利用反射,根据javabean属性的先后顺序,动态调用getXxx()方法得到属性值                  Field[] fields = t.getClass().getDeclaredFields();                  for (short i = 0; i < headers.length; i++) {                      XSSFCell cell = row.createCell(i);                      Field field = fields[i];                      String fieldName = field.getName();                     String getMethodName = "get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);                      Class tCls = t.getClass();                      Method getMethod = tCls.getMethod(getMethodName, new Class[] {});                      Object value = getMethod.invoke(t, new Object[] {});                     // 判断值的类型后进行强制类型转换                      DateFormat df = new SimpleDateFormat("yyyy-MM-dd");                    String textValue = null;                     if(fieldName.equals("conSignTime")){                    textValue = df.format(value).substring(0, 10);                    }                    // 其它数据类型都当作字符串简单处理                      else if(value != null && value != ""){                          textValue = value.toString();                      }                      if (textValue != null) {                          XSSFRichTextString richString = new XSSFRichTextString(textValue);                          cell.setCellValue(richString);                      }                  }              }              getExportedFile(workbook, fileName,response);          } catch (Exception e) {              e.printStackTrace();          }       }            /**      *       * 方法说明: 指定路径下生成EXCEL文件      * @return      */      public void getExportedFile(XSSFWorkbook workbook, String name,HttpServletResponse response) throws Exception {          BufferedOutputStream fos = null;         DateFormat df = new SimpleDateFormat("yyyy-MM-dd");        try {              String fileName = name+df.format(new Date())+ ".xlsx";              response.setContentType("application/vnd.ms-excel");              response.setHeader("Content-Disposition", "attachment;filename=" + new String( fileName.getBytes("gb2312"), "ISO8859-1" ));              fos = new BufferedOutputStream(response.getOutputStream());              workbook.write(fos);          } catch (Exception e) {              e.printStackTrace();          } finally {              if (fos != null) {                  fos.close();              }          }      } }

原创粉丝点击