1. 程式人生 > >poi的匯出

poi的匯出

       最近專案中需要用到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