导出Excel

必需的4个类:操作工具类、excel工具类、注解类、导出报表类

操作工具类:

import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.util.*;

import jxl.Sheet;
import jxl.Workbook;
import jxl.format.Alignment;
import jxl.format.UnderlineStyle;
import jxl.format.VerticalAlignment;
import jxl.read.biff.BiffException;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;

import org.apache.commons.collections.CollectionUtils;
import org.apache.log4j.Logger;

/**

  • excel 操作工具类
    */
    public class JxlUtil {

    private static final Logger LOGGER = Logger.getLogger(JxlUtil.class);

    //每个工作簿存放的记录数
    private static final int SHEET_SIZE = 50000;

    /**

    • 相关说明:在指定路径下生成excel文件

    • 业务逻辑:

    • 时间:2015年7月14日 下午10:59:18
      */
      public static void write(String savePath, String title, String sheetName, String[] heads, List dataList, int[] columnWidth) {
      File saveFile = new File(savePath);
      try {
      if (!saveFile.exists()) {
      WritableWorkbook workBook = Workbook.createWorkbook(saveFile);
      WritableSheet workSheet = null;

           int dataIndex = 0;
           int sheetIndex = 0;
           if (CollectionUtils.isNotEmpty(dataList)) {
               for (int row = 0; row < dataList.size(); row++) {
                   if (dataIndex % SHEET_SIZE == 0) {
                       workSheet = workBook.createSheet(sheetName + sheetIndex, sheetIndex);
                       workSheet.addCell(new Label(0, 0, title, getTitleHeaderFormat()));
                       //合并标题行
                       workSheet.mergeCells(0, 0, dataList.get(0).length - 1, 0);
      
                       if (heads != null && heads.length > 0) {
                           for (int col = 0; col < heads.length; col++) {
                               workSheet.addCell(new Label(col, 1, heads[col]));
                               workSheet.setColumnView(1, columnWidth[col]);
                           }
                       }
                       dataIndex = 0;
                       sheetIndex++;
                   }
      
                   String[] data = dataList.get(row);
                   for (int col = 0; col < data.length; col++) {
                       workSheet.addCell(new Label(col, dataIndex + 2, data[col]));
                   }
                   dataIndex++;
               }
           }
           workBook.write();
           workBook.close();
       } else {
           Workbook book = Workbook.getWorkbook(saveFile);
           Sheet sheet = book.getSheet(0);
           // 获取行
           int length = sheet.getRows();
           System.out.println(length);
           WritableWorkbook wbook = Workbook.createWorkbook(saveFile, book); // 根据book创建一个操作对象
           WritableSheet sh = wbook.getSheet(0);// 得到一个工作对象
      
           int dataIndex = 1;
           for (int row = 0; row < dataList.size(); row++) {
               String[] data = dataList.get(row);
               for (int col = 0; col < data.length; col++) {
                   sh.addCell(new Label(col, length + dataIndex, data[col]));
               }
               dataIndex++;
           }
           wbook.write();
           wbook.close();
       }
      

      } catch (IOException e) {
      LOGGER.error(e);
      } catch (WriteException e) {
      LOGGER.error(e);
      } catch (BiffException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      }
      }

    /**

    • 相关说明:excel下载

    • 时间:2015年8月28日 下午3:47:00

    • @throws Exception
      */
      public static void export(OutputStream os, String title, String sheetName, List headList, List dataList, int[] columnWidth) throws Exception {
      WritableWorkbook workBook;
      try {
      workBook = Workbook.createWorkbook(os);
      WritableSheet workSheet = null;
      int dataIndex = 0;
      int sheetIndex = 0;
      if (CollectionUtils.isNotEmpty(dataList)) {
      for (int row = 0; row < dataList.size(); row++) {
      if (dataIndex % SHEET_SIZE == 0) {
      workSheet = workBook.createSheet(sheetName + sheetIndex, sheetIndex);
      //workSheet.addCell(new Label(0, 0, title, getTitleHeaderFormat()));
      //合并标题行
      //workSheet.mergeCells(0, 0, dataList.get(0).size() - 1, 0);

                   if (CollectionUtils.isNotEmpty(headList)) {
                       for (int headIndex = 0; headIndex < headList.size(); headIndex++) {
                           workSheet.addCell(new Label(headIndex, 0, headList.get(headIndex)));
                           if (columnWidth != null && columnWidth.length > 0) {
                               workSheet.setColumnView(0, columnWidth[headIndex]);
                           }
                       }
                   }
                   dataIndex = 0;
                   sheetIndex++;
               }
      
               List data = dataList.get(row);
               for (int col = 0; col < data.size(); col++) {
                   workSheet.addCell(new Label(col, dataIndex + 1, String.valueOf(data.get(col))));
               }
               dataIndex++;
           }
       } else {
           workSheet = workBook.createSheet(sheetName + sheetIndex, sheetIndex);
           //  workSheet.addCell(new Label(0, 0, title, getTitleHeaderFormat()));
           //合并标题行
           // workSheet.mergeCells(0, 0, headList.size() - 1, 0);
      
           if (CollectionUtils.isNotEmpty(headList)) {
               for (int headIndex = 0; headIndex < headList.size(); headIndex++) {
                   workSheet.addCell(new Label(headIndex, 0, headList.get(headIndex)));
                   if (columnWidth != null && columnWidth.length > 0) {
                       workSheet.setColumnView(0, columnWidth[headIndex]);
                   }
               }
           }
       }
       workBook.write();// 写入数据
       workBook.close();
       

      } catch (Exception e) {
      e.printStackTrace();
      throw e;
      }
      }

      /**

      • 相关说明:格式化标题
      • 业务逻辑:
      • 时间:2015年7月20日 下午4:30:04
        */
        private static WritableCellFormat getTitleHeaderFormat() {
        WritableCellFormat headerFormat = null;
        try {
        //1.设置excel标题
        headerFormat = new WritableCellFormat();
        //水平居中对齐
        headerFormat.setAlignment(Alignment.CENTRE);
        //竖直方向居中对齐
        headerFormat.setVerticalAlignment(VerticalAlignment.CENTRE);
        WritableFont font = new WritableFont(WritableFont.createFont(“宋体”), 20,
        WritableFont.BOLD,
        false,
        UnderlineStyle.NO_UNDERLINE);
        headerFormat.setFont(font);
        } catch (WriteException e) {
        LOGGER.error(e);
        }
        return headerFormat;
        }

      /**

      • 相关说明:excel下载(无标题)

      • 开发者:zhangpenghui

      • 时间:2015年8月28日 下午3:47:00

      • @throws Exception
        */
        public static void export(OutputStream os, String sheetName, List headList, List dataList, int[] columnWidth) throws Exception {
        WritableWorkbook workBook;
        try {
        workBook = Workbook.createWorkbook(os);
        WritableSheet workSheet = null;
        int dataIndex = 0;
        int sheetIndex = 0;

         if (CollectionUtils.isNotEmpty(dataList)) {
             for (int row = 0; row < dataList.size(); row++) {
                 if (dataIndex % SHEET_SIZE == 0) {
                     workSheet = workBook.createSheet(sheetName + sheetIndex, sheetIndex);
                     if (CollectionUtils.isNotEmpty(headList)) {
                         for (int headIndex = 0; headIndex < headList.size(); headIndex++) {
                             workSheet.addCell(new Label(headIndex, 0, headList.get(headIndex)));
                             if (columnWidth != null && columnWidth.length > 0) {
                                 workSheet.setColumnView(1, columnWidth[headIndex]);
                             }
                         }
                     }
                     dataIndex = 0;
                     sheetIndex++;
                 }
        
                 List data = dataList.get(row);
                 for (int col = 0; col < data.size(); col++) {
                     workSheet.addCell(new Label(col, dataIndex + 1, String.valueOf(data.get(col))));
                 }
                 dataIndex++;
             }
         } else {
             workSheet = workBook.createSheet(sheetName + sheetIndex, sheetIndex);
             if (CollectionUtils.isNotEmpty(headList)) {
                 for (int headIndex = 0; headIndex < headList.size(); headIndex++) {
                     workSheet.addCell(new Label(headIndex, 0, headList.get(headIndex)));
                     if (columnWidth != null && columnWidth.length > 0) {
                         workSheet.setColumnView(1, columnWidth[headIndex]);
                     }
                 }
             }
         }
         workBook.write();// 写入数据
         workBook.close();
         

        } catch (Exception e) {
        e.printStackTrace();
        throw e;
        }
        }

        public static void export1(OutputStream os, String sheetName, List> dataList, int[] columnWidth) throws Exception {
        List datas = new LinkedList<>();
        List headList = new LinkedList<>();

         Set strings = new HashSet<>();
         for (Map map : dataList) {
             strings = map.keySet();
        
             Iterator it = map.values().iterator();
             List data = new LinkedList<>();
             while (it.hasNext()) {
        
                 data.add(it.next());
        
             }
             datas.add(data);
         }
         headList.addAll(strings);
         export(os, sheetName, headList, datas, columnWidth);
         

        }

        }

        excel工具类

        import cn.com.njits.api.util.excel.ExcelAnnotation;
        import org.apache.poi.hssf.usermodel.;
        import org.apache.poi.hssf.util.HSSFColor;
        import org.apache.poi.ss.usermodel.
        ;
        import org.apache.poi.ss.util.CellRangeAddress;
        import org.apache.poi.xssf.streaming.SXSSFWorkbook;
        import org.apache.poi.xssf.usermodel.XSSFRichTextString;

        import java.lang.reflect.Field;
        import java.lang.reflect.InvocationTargetException;
        import java.lang.reflect.Method;
        import java.text.SimpleDateFormat;
        import java.util.*;

        /**

        • excel工具类

        • @param

        • @author wangkecheng
          */
          public class ExcelUtil {

          public static final int EXPORT_07_LEAST_SIZE = 50000;

          /**

          • 功能 :获取表单导出数据

          • 开发:wangkecheng

          • @param list 数据列表

          • @param title 首行标题

          • @param className 实体对象class

          • @param exportType 模板标号

          • @return

          • @throws Exception
            */
            public HSSFWorkbook exportExcel(List list, String title, Class className, Integer exportType) throws Exception {
            // 获取属性
            Field[] fields = className.getDeclaredFields();
            List fieldList = new ArrayList();
            for (Field fie : fields) {
            if (fie.isAnnotationPresent(ExcelAnnotation.class)) {
            fieldList.add(fie);
            }
            }
            // 按照id进行排序
            Collections.sort(fieldList, new Comparator() {
            @Override
            public int compare(Field f1, Field f2) {
            return f1.getAnnotation(ExcelAnnotation.class).id() - f2.getAnnotation(ExcelAnnotation.class).id();
            }
            });
            int columnsize = fieldList.size(), rowindex = 0;
            // 创建一个HSSFWorbook对象(excel的文档对象)
            HSSFWorkbook hWorkbook = new HSSFWorkbook();
            // 创建一个HSSFSheet对象(excll的表单)
            HSSFSheet hSheet = hWorkbook.createSheet();
            // 创建行(excel的行)
            HSSFRow hRow = hSheet.createRow(rowindex++);
            //设置行高度
            hRow.setHeight((short) 380);
            // 创建单元格(从0开始)
            HSSFCell hCell = hRow.createCell((short) 0);
            //样式对象
            HSSFCellStyle cellStyle = getCellStyle(hWorkbook, (short) 300, (short) 500);
            // 将上面获得的样式对象给对应单元格
            hCell.setCellStyle(cellStyle);
            //设置标题行
            hCell.setCellValue(title);

            if (getHuoResult(fieldList.isEmpty(), list == null, list.isEmpty())) {
            return hWorkbook;
            }

            //创建第二行,代表列名
            hRow = hSheet.createRow(rowindex++);
            cellStyle = getCellStyle(hWorkbook, (short) 270, (short) 500);
            generateTitle(exportType, fieldList, columnsize, hSheet, hRow, cellStyle);

            //组装excel的数据
            cellStyle = getCellStyle(hWorkbook, (short) 220, (short) 500);// 设置单元格格式
            generateData(list, fieldList, columnsize, rowindex, hSheet, cellStyle);

            /**

            • 第1个参数:从哪一行开始
            • 第2个参数:到哪一行结束
            • 第3个参数:从哪一列开始
            • 第4个参数:到哪一列结束
              */
              hSheet.addMergedRegion(new CellRangeAddress(0, 0, 0, columnsize - 1));

            // 固定表头(前一个参数代表列,后一个参数单表行)
            hSheet.createFreezePane(0, 1);
            return hWorkbook;
            }

          /**

          • 功能:組裝列明
          • @param exportType 模板编号
          • @param fieldList 列名
          • @param columnsize 列数
          • @param hSheet sheet页
          • @param hRow 行
          • @param cellStyle 样式
            */
            private void generateTitle(Integer exportType, List fieldList, int columnsize, HSSFSheet hSheet, HSSFRow hRow,
            HSSFCellStyle cellStyle) {
            HSSFCell hCell;
            for (int i = 0; i < columnsize; i++) {
            Field field = fieldList.get(i);
            if (field.isAnnotationPresent(ExcelAnnotation.class)) {
            // 获取该字段的注解对象
            ExcelAnnotation anno = field.getAnnotation(ExcelAnnotation.class);
            hCell = hRow.createCell((short) i);
            String colName = field.getAnnotation(ExcelAnnotation.class).name().length > exportType
            ? field.getAnnotation(ExcelAnnotation.class).name()[exportType]
            : field.getAnnotation(ExcelAnnotation.class).name()[0];
            hCell.setCellValue(colName);
            hCell.setCellStyle(cellStyle);
            hSheet.setColumnWidth((short) i, (short) anno.width());
            }
            }
            }

          /**

          • 组装excel的数据
          • @param list 具体数据
          • @param fieldList 列名
          • @param columnsize 列数
          • @param rowindex 行数计数
          • @param hSheet sheet页
          • @param cellStyle 样式
          • @return
          • @throws NoSuchMethodException
          • @throws IllegalAccessException
          • @throws InvocationTargetException
            */
            private int generateData(List list, List fieldList, int columnsize, int rowindex, HSSFSheet hSheet,
            HSSFCellStyle cellStyle) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {
            HSSFRow hRow;
            HSSFCell hCell;
            for (Object model : list) {
            hRow = hSheet.createRow(rowindex++);
            //获取该类
            Class clazz = model.getClass();
            for (int i = 0; i < columnsize; i++) {
            Field field = fieldList.get(i);
            //获取方法名
            String methodName = “get” + field.getName().substring(0, 1).toUpperCase() + field.getName().substring(1);
            Method method = clazz.getMethod(methodName);
            try {
            // 获取该字段的注解对象
            Object result = method.invoke(model);
            hCell = hRow.createCell((short) i);
            if (result != null) {
            if (result.getClass().isAssignableFrom(Date.class)) {
            SimpleDateFormat format = new SimpleDateFormat(“yyyy年MM月dd日 HH时mm分ss秒”);
            result = format.format(result);
            }
            hCell.setCellValue(new HSSFRichTextString(result.toString()));
            } else {
            hCell.setCellValue(new HSSFRichTextString("-"));
            }
            hCell.setCellStyle(cellStyle);
            } catch (IllegalArgumentException e) {
            System.out.println(e.getMessage());
            }
            }
            }
            return rowindex;
            }

          /**

          • 生成07格式的excel对象 使用流方式防止内存溢出

          • @param list

          • @param title

          • @param className

          • @param exportType

          • @return

          • @throws Exception
            */
            public SXSSFWorkbook exportExcel07S(List list, String title, Class className, Integer exportType) throws Exception {
            // 获取属性
            Field[] fields = className.getDeclaredFields();
            List fieldList = new ArrayList();
            for (Field fie : fields) {
            if (fie.isAnnotationPresent(ExcelAnnotation.class)) {
            fieldList.add(fie);
            }
            }
            // 按照id进行排序
            Collections.sort(fieldList, new Comparator() {
            @Override
            public int compare(Field f1, Field f2) {
            return f1.getAnnotation(ExcelAnnotation.class).id() - f2.getAnnotation(ExcelAnnotation.class).id();
            }
            });

            int columnsize = fieldList.size(), rowindex = 0;
            // 创建一个HSSFWorbook对象s
            SXSSFWorkbook hWorkbook = new SXSSFWorkbook();
            // 创建一个HSSFSheet对象(sheet页)
            Sheet hSheet = hWorkbook.createSheet();
            // 创建第一行(此行作为头)
            Row hRow = hSheet.createRow(rowindex++);
            hRow.setHeight((short) 380);
            // 创建单元格(第一(0)个)
            Cell hCell = hRow.createCell((short) 0);
            // 设置样式
            CellStyle cellStyle = getCellStyle07S(hWorkbook, (short) 300, (short) 500);
            // 将上面获得的样式对象给对应单元格
            hCell.setCellStyle(cellStyle);
            //设置标题行
            hCell.setCellValue(title);

            if (getHuoResult(fieldList.isEmpty(), list == null, list.isEmpty())) {
            return hWorkbook;
            }

            // 创建第二列,列名
            hRow = hSheet.createRow(rowindex++);
            cellStyle = getCellStyle07S(hWorkbook, (short) 270, (short) 500);
            createTitle07S(exportType, fieldList, columnsize, hSheet, hRow, cellStyle);

            //生成数据
            cellStyle = getCellStyle07S(hWorkbook, (short) 220, (short) 500);// 设置单元格格式
            dealCreateRow07S(list, fieldList, columnsize, rowindex, hSheet, cellStyle);

            /**

            • 第1个参数:从哪一行开始
            • 第2个参数:到哪一行结束
            • 第3个参数:从哪一列开始
            • 第4个参数:到哪一列结束
              */
              hSheet.addMergedRegion(new CellRangeAddress(0, 0, 0, columnsize - 1));

            // 固定表头(前一个参数代表列,后一个参数单表行)
            hSheet.createFreezePane(0, 1);
            return hWorkbook;
            }

          private int dealCreateRow07S(List list, List fieldList, int columnsize, int rowindex, Sheet hSheet,
          CellStyle cellStyle) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {
          Row hRow;
          Cell hCell;
          for (Object model : list) {
          hRow = hSheet.createRow(rowindex++);
          // 获取该类 并获取自身方法
          Class clazz = model.getClass();
          for (int i = 0; i < columnsize; i++) {
          Field field = fieldList.get(i);
          String methodName = “get” + field.getName().substring(0, 1).toUpperCase()
          + field.getName().substring(1);
          Method method = clazz.getMethod(methodName);
          try {
          // 获取该字段的注解对象
          Object result = method.invoke(model);
          hCell = hRow.createCell((short) i);
          if (result != null) {
          if (result.getClass().isAssignableFrom(Date.class)) {
          SimpleDateFormat format = new SimpleDateFormat(“yyyy年MM月dd日”);
          result = format.format(result);
          }
          hCell.setCellValue(new XSSFRichTextString(result.toString()));
          } else {
          hCell.setCellValue(new XSSFRichTextString("-"));
          }
          hCell.setCellStyle(cellStyle);
          } catch (IllegalArgumentException e) {
          System.out.println(e.getMessage());
          }
          }
          }
          return rowindex;
          }

          /**

          • 生成列名
          • @param exportType 模板编号
          • @param fieldList 列名
          • @param columnsize 列数
          • @param hSheet
          • @param hRow
          • @param cellStyle
            */
            private void createTitle07S(Integer exportType, List fieldList, int columnsize, Sheet hSheet, Row hRow,
            CellStyle cellStyle) {
            Cell hCell;
            for (int i = 0; i < columnsize; i++) {
            Field field = (Field) fieldList.get(i);
            if (field.isAnnotationPresent(ExcelAnnotation.class)) {
            // 获取该字段的注解对象
            ExcelAnnotation anno = field.getAnnotation(ExcelAnnotation.class);
            hCell = hRow.createCell((short) i);
            String colName = field.getAnnotation(ExcelAnnotation.class).name().length > exportType
            ? field.getAnnotation(ExcelAnnotation.class).name()[exportType]
            : field.getAnnotation(ExcelAnnotation.class).name()[0];
            hCell.setCellValue(colName);
            hCell.setCellStyle(cellStyle);
            hSheet.setColumnWidth((short) i, (short) anno.width());
            }
            }
            }

          /**

          • 功能 :设置excel表格默认样式
          • @param hWorkbook 需导出Excel数据
          • @param fontHeight 字体粗度
          • @param boldWeight 表格线的粗度
          • @return
            */
            public HSSFCellStyle getCellStyle(HSSFWorkbook hWorkbook, short fontHeight, short boldWeight) {
            HSSFCellStyle cellStyle;
            HSSFFont font;
            cellStyle = hWorkbook.createCellStyle();
            cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
            cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
            cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
            cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
            cellStyle.setTopBorderColor(HSSFColor.BLACK.index);
            cellStyle.setLeftBorderColor(HSSFColor.BLACK.index);
            cellStyle.setRightBorderColor(HSSFColor.BLACK.index);
            cellStyle.setBottomBorderColor(HSSFColor.BLACK.index);
            font = hWorkbook.createFont();
            font.setFontHeight(fontHeight);
            font.setBoldweight(boldWeight);
            font.setFontName(“宋体”);
            cellStyle.setFont(font);
            cellStyle.setWrapText(true);
            cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
            cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
            return cellStyle;
            }

          /**

          • 功能 :设置excel 07表格默认样式
          • @param hWorkbook 需导出Excel数据
          • @param fontHeight 字体粗度
          • @param boldWeight 表格线的粗度
          • @return
            */
            public CellStyle getCellStyle07S(SXSSFWorkbook hWorkbook, short fontHeight, short boldWeight) {
            CellStyle cellStyle;
            Font font;
            cellStyle = hWorkbook.createCellStyle();
            cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
            cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
            cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
            cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
            cellStyle.setTopBorderColor(HSSFColor.BLACK.index);
            cellStyle.setLeftBorderColor(HSSFColor.BLACK.index);
            cellStyle.setRightBorderColor(HSSFColor.BLACK.index);
            cellStyle.setBottomBorderColor(HSSFColor.BLACK.index);
            font = hWorkbook.createFont();
            font.setFontHeight(fontHeight);
            font.setBoldweight(boldWeight);
            font.setFontName(“宋体”);
            cellStyle.setFont(font);
            cellStyle.setWrapText(true);
            cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
            cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
            return cellStyle;
            }

          /*

          • 获取或运算结果
            */
            private static boolean getHuoResult(Boolean… bs) {
            for (boolean b : bs) {
            if (b) {
            return b;
            }
            }
            return false;
            }
            }

        注解类
        import java.lang.annotation.*;
        /**

        • 功能:excel模板设置

        */
        @Documented
        @Retention(RetentionPolicy.RUNTIME)
        @Target(ElementType.FIELD)
        public @interface ExcelAnnotation {
        //Excel列ID(Excel列排序序号)
        int id();
        //Excel列名
        String[] name();
        //Excel列宽
        int width() default 5000;
        }

        导出excel类
        import cn.com.njits.api.util.MyExcelUtil;
        import cn.com.njits.api.util.excel.util.ExcelUtil;
        import org.apache.commons.lang.StringUtils;
        import org.apache.poi.hssf.usermodel.HSSFWorkbook;
        import org.apache.poi.xssf.streaming.SXSSFWorkbook;

        import javax.servlet.http.HttpServletRequest;
        import javax.servlet.http.HttpServletResponse;
        import java.io.IOException;
        import java.io.OutputStream;
        import java.net.URLEncoder;
        import java.util.List;

        /**
        功能描述:导出报表
        /
        public class ReportExcel {
        /

        * 功能: Excel导出公共方法
        * 记录条数大于50000时 导出.xlsx文件(excel07+) 小于等于50000时导出 .xls文件(excel97-03)
        * 开发:wangkecheng
        * @param list 需要导出的列表数据
        * @param title 导出文件的标题
        * @param className 导出对象的类名
        * @param exportType 针对同一个pojo可能有多个不同的导出模板时,可以通过此属性来决定导出哪一套模板,默认第一套
        * @param response 用来获取输出流
        * @param request 针对火狐浏览器导出时文件名乱码的问题,也可以不传入此值
        * @throws IOException
        */
        public void excelExport(List list, String title, Class className, Integer exportType, HttpServletResponse response, HttpServletRequest request) throws IOException {
        OutputStream out = response.getOutputStream();
        try {
        ExcelUtil excel = new ExcelUtil();
        if(list!=null && list.size()>ExcelUtil.EXPORT_07_LEAST_SIZE){
        dealBigNumber(list, title, className, exportType, response, request, out, excel);
        }else{
        HSSFWorkbook hss = new HSSFWorkbook();
        if(exportTypenull){
        hss = excel.exportExcel(list,title,className,0);
        }else{
        hss = excel.exportExcel(list, title, className, exportType);
        }
        String disposition = “attachment;filename=”;
        if(request!=null&&request.getHeader(“USER-AGENT”)!=null&& StringUtils.contains(request.getHeader(“USER-AGENT”), “Firefox”)){
        disposition += new String((title+".xls").getBytes(),“ISO8859-1”);
        }else{
        disposition += URLEncoder.encode(title+".xls", “UTF-8”);
        }
        response.setContentType(“application/vnd.ms-excel;charset=UTF-8”);
        response.setHeader(“Content-disposition”, disposition);
        hss.write(out);
        }
        } catch (Exception e) {
        System.out.println(e.getMessage());
        } finally {
        out.close();
        }
        }
        private void dealBigNumber(List list, String title, Class className, Integer exportType,
        HttpServletResponse response, HttpServletRequest request, OutputStream out, ExcelUtil excel)
        throws Exception{
        SXSSFWorkbook hss;
        if(exportType
        null){
        hss = excel.exportExcel07S(list,title,className,0);
        }else{
        hss = excel.exportExcel07S(list, title, className, exportType);
        }
        String disposition = “attachment;filename=”;
        if(request!=null && request.getHeader(“USER-AGENT”) != null && StringUtils.contains(request.getHeader(“USER-AGENT”), “Firefox”)){
        disposition += new String((title+".xlsx").getBytes(),“ISO8859-1”);
        }else{
        disposition += URLEncoder.encode(title+".xlsx", “UTF-8”);
        }
        response.setContentType(“application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8”);
        response.setHeader(“Content-disposition”, disposition);
        hss.write(out);
        }
        }

        导出事例(SpringBoot框架):
        实体类:
        package cn.com.njits.api.entity.system;

        import cn.com.njits.api.util.excel.ExcelAnnotation;
        import io.swagger.annotations.ApiModel;
        import lombok.AllArgsConstructor;
        import lombok.Data;
        import lombok.NoArgsConstructor;
        import lombok.Value;
        import org.springframework.format.annotation.DateTimeFormat;

        import java.util.Date;

        @Data
        @NoArgsConstructor
        @AllArgsConstructor
        @ApiModel(value = “CustomerSysLogQueryPO”, description = “系统日志搜索类”)
        public class CustomerSysLogQueryPO {
        //@ExcelAnnotation(id=1,name={“编号”},width = 10000)
        private String id;
        @ExcelAnnotation(id=1,name={“用户名”},width = 5000)
        private String userName;
        @ExcelAnnotation(id=1,name={“姓名”},width = 5000)
        private String fullName;
        @ExcelAnnotation(id=1,name={“操作时间”},width = 10000)
        // @DateTimeFormat(pattern = “yyyy-MM-dd HH:mm:ss”)
        private Date createTime;
        @ExcelAnnotation(id=1,name={“操作描述”},width = 15000)
        private String processContent;
        @ExcelAnnotation(id=1,name={“IP地址”},width = 5000)
        private String ip;
        }

        控制器:
        @ApiOperation(value = “系统设置-日志管理-导出”)
        @ApiImplicitParams({
        @ApiImplicitParam(name = “processContent”, value = “操作描述”, type = “query”),
        @ApiImplicitParam(name = “userName”, value = “登录名”, type = “query”),
        @ApiImplicitParam(name = “fullName”, value = “用户名”, type = “query”),
        @ApiImplicitParam(name = “startTime”, value = “开始时间”, type = “query”),
        @ApiImplicitParam(name = “endTime”, value = “结束时间”, type = “query”)})
        @RequestMapping(value = “sysLog/export”, method = RequestMethod.GET)
        @ResponseBody
        public void export(@RequestParam(name = “processContent”, required = false) String processContent,
        @RequestParam(name = “userName”, required = false) String userName,
        @RequestParam(name = “fullName”, required = false) String fullName,
        @RequestParam(name = “startTime”, required = false) Long startTime,
        @RequestParam(name = “endTime”, required = false) Long endTime,
        HttpServletRequest request, HttpServletResponse response) throws Exception {
        List customerSysLogQueryPOS = customerSysLogMapper.querySysLog(processContent, userName, fullName, startTime, endTime);
        ReportExcel reportExcel = new ReportExcel();
        reportExcel.excelExport(customerSysLogQueryPOS, “系统日志列表”, CustomerSysLogQueryPO.class, 1, response, request);
        }

        你可能感兴趣的:(导出Excel)