poi的导出

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lbd_123/article/details/83927354

       最近项目中需要用到excel的导出功能,之前也曾做过,但是没有总结过,考虑到这个功能在web项目中的高频使用,因此这次开发完成之后,把对excel的导出功能进行一次总结,样式的问题,我这次没有考虑,主要是导出功能的实现过程,下面就是我的代码:

       既然是对excel的操作,那么首先考虑的就是要把这段操作代码进行抽取,将其作为一个工具类进行重复调用,下面就是我的excel的工具类:

package com.suyin.goods.utils;

import org.apache.poi.hssf.usermodel.*;

import org.apache.poi.ss.usermodel.*;

import javax.servlet.ServletOutputStream;

import java.io.IOException;

import java.util.ArrayList;

import java.util.List;

/**

* 导出Excel公共方法

* @version 1.0

*

* @author lihao

*

*/

public class ExcelUtils {

   //显示的导出表的标题

   private String title;

   //导出表的列名

   private String[] rowName ;

   private List<Object[]> dataList = new ArrayList<Object[]>();

    private ServletOutputStream outputStream;

   //构造方法,传入要导出的数据

   public ExcelUtils(String title, String[] rowName, List<Object[]> dataList, ServletOutputStream outputStream){

      this.dataList = dataList;

      this.rowName = rowName;

      this.title = title;

      this.outputStream =outputStream;

  }

/*

* 导出数据

* */

public void export() throws Exception{

   try{

       HSSFWorkbook workbook = new HSSFWorkbook(); // 创建工作簿对象

       HSSFSheet sheet = workbook.createSheet(title); // 创建工作表

       // 产生表格标题行

      HSSFRow rowm = sheet.createRow(0);

      rowm.setHeight((short) (25 * 35)); //设置高度

     // 定义所需列数

     int columnNum = rowName.length;

     HSSFRow rowRowName = sheet.createRow(0); // 在索引2的位置创建行(最顶端的行开始的第二行)

      rowRowName.setHeight((short) (25 * 25)); //设置高度

     // 将列头设置到sheet的单元格中

     for(int n=0;n<columnNum;n++){

        HSSFCell cellRowName = rowRowName.createCell(n); //创建列头对应个数的单元格

        cellRowName.setCellType(CellType.STRING); //设置列头单元格的数据类型

        HSSFRichTextString text = new HSSFRichTextString(rowName[n]);

        cellRowName.setCellValue(text); //设置列头单元格的值

}

     //将查询出的数据设置到sheet对应的单元格中

     for(int i=0;i<dataList.size();i++){

         Object[] obj = dataList.get(i);//遍历每个对象

         HSSFRow row = sheet.createRow(i+1);//创建所需的行数

         row.setHeight((short) (25 * 20)); //设置高度

        for(int j=0; j<obj.length; j++){

           HSSFCell cell =row.createCell(j);

           if(null !=obj[j] && !"".equals(obj[j])){

           cell.setCellValue(obj[j].toString());

       }

}

}

     if(null!=workbook){

        try

      {

       workbook.write(outputStream);

       outputStream.flush();

       outputStream.close();

}catch (IOException e){

     e.printStackTrace();

}

}

}catch(Exception e){

e.printStackTrace();

}

}

}

   下面是对数据的封装

@RequestMapping(value = "/export",method = RequestMethod.GET)

public String export(HttpServletResponse response, HttpServletRequest request,String beginTime, String endTime) {

    response.setContentType("application/binary;charset=UTF-8");

    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    Map<String, Object> paraMap = new HashMap<>();

    if(StringUtils.isNotEmpty(beginTime) && StringUtils.isNotBlank(beginTime)){

        paraMap.put("beginTime", beginTime);

    }

    if(StringUtils.isNotEmpty(beginTime) && StringUtils.isNotBlank(beginTime)){

        paraMap.put("endTime", endTime);

    }

   try {

      ServletOutputStream out = response.getOutputStream();

      String title = new String((new SimpleDateFormat("yyyy-MM-dd HH-mm-ss").format(new Date())).getBytes(), "UTF-8");

      response.setHeader("Content-disposition", "filename=" + title + ".xls");

      String[] rowName = {"序号","用户昵称", "打卡内容", "打卡时间"};

      List<SignVO> list = fiveMinutesServiceSign.getSignVOList(paraMap);

      List<Object[]> dataList = new ArrayList<Object[]>();

      Object[] objs = null;

     for (int i = 0; i <list.size() ; i++) {

         SignVO signVO =list.get(i);

         objs =new Object[rowName.length];

         objs[0] =i;

         objs[1] =signVO.getNickname();

         objs[2] =signVO.getComment();

         objs[3] =simpleDateFormat.format(signVO.getSignTime());

         dataList.add(objs);

  }

     ExcelUtil excelUtil = new ExcelUtil("每日五分钟打卡",rowName,dataList,out);

     excelUtil.export();

     return null;

 } catch (Exception e) {

     e.printStackTrace();

     return "导出信息失败";

}

以上就是数据导出excel的代码,希望能帮助到大家!后面会写一篇关于poi的导入,关于poi的jar包可以去我的资源地址下载:

https://download.csdn.net/download/lbd_123/10775477

猜你喜欢

转载自blog.csdn.net/lbd_123/article/details/83927354