导出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<String[]> 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<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<Object> 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<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<Object> 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<Map<String, Object>> dataList, int[] columnWidth) throws Exception {
    List<List> datas = new LinkedList<>();
    List headList = new LinkedList<>();

     Set<String> strings = new HashSet<>();
     for (Map<String, Object> map : dataList) {
         strings = map.keySet();
    
         Iterator it = map.values().iterator();
         List<Object> 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);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值