spring boot 导入导出

首页 / 新闻资讯 / 正文

    private final static Logger logger = LoggerFactory.getLogger(ExcelUtils.class);     /**      * @param list     导出的数据list      * @param clazz    导出的对象class      * @param fileName 导出的文件名称      * @param response reponse      * @param <T>      */     public static <T> void exportExcel(List<T> list, Class<T> clazz, String fileName, HttpServletResponse response) {         SXSSFWorkbook workBook = getWorkBook(list, clazz);         try {             response.setContentType("application/vnd.ms-excel;charset=UTF-8");             response.setCharacterEncoding("UTF-8");             response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName + ".xls", "UTF-8"));             OutputStream output = response.getOutputStream();             BufferedOutputStream bufferedOutPut = new BufferedOutputStream(output);             bufferedOutPut.flush();             workBook.write(bufferedOutPut);             bufferedOutPut.close();         } catch (Exception e) {             e.printStackTrace();         }     }      private static <T> SXSSFWorkbook getWorkBook(List<T> list, Class<T> clazz) {         SXSSFWorkbook wb = new SXSSFWorkbook(100);         Sheet sheet = wb.createSheet();         Row row = sheet.createRow(0);         row.setHeightInPoints(23);         Field[] declaredFields = getAllFields(clazz);         //添加序号         Cell cellOrder = row.createCell(0);         cellOrder.setCellValue("序号");         cellOrder.setCellStyle(titleStyle(wb));         sheet.setColumnWidth(0, 10 * 256);         //设置表头         for (Field field : declaredFields) {             Excel annotation = field.getAnnotation(Excel.class);             if (annotation != null) {                 Cell cell = row.createCell(Integer.valueOf(annotation.orderNum()) );                 cell.setCellValue(annotation.name());                 cell.setCellStyle(titleStyle(wb));                 //设置列的宽度                 sheet.setColumnWidth(Integer.valueOf(annotation.orderNum()),   (int)annotation.width() * 256);             }         }         // 遍历集合数据,产生数据行         Iterator<?> it = list.iterator();         int index = 0;         while (it.hasNext()) {             index++;             row = sheet.createRow(index);             Cell cell = row.createCell(0);             cell.setCellStyle(orderStyle(wb));             cell.setCellValue(index);             row.setHeightInPoints(18);             T t = (T) it.next();             // 利用反射,根据javabean属性的先后顺序,动态调用getXxx()方法得到属性值             Field[] fields = getAllFields(t.getClass());             for (Field field : fields) {                 Excel annotation = field.getAnnotation(Excel.class);                 if (annotation != null) {                     cell = row.createCell(Integer.valueOf(annotation.orderNum()) );                     cell.setCellStyle(contentStyle(wb));                     String fieldName = field.getName();                     String getMethodName = "get"                             + fieldName.substring(0, 1).toUpperCase()                             + fieldName.substring(1);                     try {                         Method getMethod = t.getClass().getMethod(getMethodName,                                 new Class[]{});                         Object value = getMethod.invoke(t, new Object[]{});                         cell.setCellValue(null == value ? "" : String.valueOf(value));                     } catch (Exception e) {                         e.printStackTrace();                     }                 }             }         }         return wb;     }      //设置标题样式     private static CellStyle titleStyle(SXSSFWorkbook wb) {         CellStyle cellStyle = contentStyle(wb);         //设置居中         cellStyle.setAlignment(HorizontalAlignment.CENTER);         //设置单元格背景颜色         cellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());         //设置单元格填充样式(使用纯色背景颜色填充)         cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);         //设置字体加粗         Font font = wb.createFont();         font.setBold(true);         font.setFontHeightInPoints((short) 12);         //设置字体         font.setFontName("宋体");         cellStyle.setFont(font);         return cellStyle;     }      //设置单元格样式     private static CellStyle contentStyle(SXSSFWorkbook wb) {         //给单元格设置样式         CellStyle cellStyle = wb.createCellStyle();         Font font = wb.createFont();         //设置字体大小         font.setFontHeightInPoints((short) 11);         //设置字体         font.setFontName("宋体");         //给字体设置样式         cellStyle.setFont(font);         //字体设置边框         cellStyle.setBorderBottom(BorderStyle.THIN);         cellStyle.setBorderRight(BorderStyle.THIN);         //设置垂直居中         cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);         return cellStyle;     }      //设置单元格样式     private static CellStyle orderStyle(SXSSFWorkbook wb) {         CellStyle cellStyle = contentStyle(wb);         cellStyle.setAlignment(HorizontalAlignment.CENTER);         return cellStyle;     }      private static <T> Field[] getAllFields(Class<T> clazz) {         Field[] declaredFields = clazz.getDeclaredFields();         Class superClass = clazz.getSuperclass();         if (!superClass.equals(Object.class)) {             Field[] superFields = superClass.getDeclaredFields();             int sonLength = declaredFields.length;             int superLength = superFields.length;             // 合并两个数组             Field[] newFields = new Field[sonLength + superLength];             System.arraycopy(declaredFields, 0, newFields, 0, sonLength);             System.arraycopy(superFields, 0, newFields, sonLength, superLength);             return newFields;         }         return declaredFields;     }            private static final String XLS = "xls";         private static final String XLSX = "xlsx";          /**          * 根据文件后缀名类型获取对应的工作簿对象          * @param inputStream 读取文件的输入流          * @param fileType 文件后缀名类型(xls或xlsx)          * @return 包含文件数据的工作簿对象          * @throws IOException          */         public static Workbook getWorkbook(InputStream inputStream, String fileType) throws IOException {             Workbook workbook = null;             if (fileType.equalsIgnoreCase(XLS)) {                 workbook = new HSSFWorkbook(inputStream);             } else if (fileType.equalsIgnoreCase(XLSX)) {                 workbook = new XSSFWorkbook(inputStream);             }             return workbook;         } 

//导入

 public void add(MultipartFile file) {         String fileName = file.getOriginalFilename();         File file1 = new File(fileName);         ImportParams params = new ImportParams();         params.setTitleRows(1);         params.setHeadRows(2);          List<Bill> bills = ExcelImportUtil.importExcel(file1, Bill.class, params);         for (Bill bill : bills) {             billlMapper.insert(bill);          } 
} //导出 
  @RequestMapping("/exportExcelDc")     public void exportExcelDc(HttpServletResponse response) throws Exception {          List<Bill> list = billService.list();         ExcelUtils.exportExcel(list, Bill.class, "数据", response);     }  

//另一种导出

    @RequestMapping("/exportExcelDc1")     public void exportExcelDc1(HttpServletResponse response) throws Exception {         ExportParams params = new ExportParams();         params.setTitle("年度账单");         params.setSheetName("年度账单表");         params.setType(ExcelType.XSSF);         List<Bill> list = billService.list();          Workbook workbook = ExcelExportUtil.exportExcel(params, Bill.class, list);         response.setContentType("application/vnd.ms-excel;charset=UTF-8");         response.setCharacterEncoding("UTF-8");         response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("测试" + ".xls", "UTF-8"));         OutputStream output = response.getOutputStream();         BufferedOutputStream bufferedOutPut = new BufferedOutputStream(output);         bufferedOutPut.flush();         workbook.write(bufferedOutPut);         bufferedOutPut.close();     } 
// 注解   @Excel(name = "序号",orderNum = "0")