POI实现Excel导出

POI实现Excel导出

下面简单给大家介绍poi导出配置

1.首先导入依赖


    
      org.apache.poi
      poi
      3.6
    

2.创建工具类
  

package javaj.work.util;
 
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
 
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
public class ExcelUtil {
 
    //参数说明:  fileName:文件名   projects:对象集合  columnNames: 列名   keys: map中的key
    public static void start_download(HttpServletResponse response, String fileName, List projects,
                                      String[] columnNames, String[] keys) throws IOException {
 
        //将集合中对象的属性  对应到  List>
        List> list=createExcelRecord(projects, keys);
 
        ByteArrayOutputStream os = new ByteArrayOutputStream();
        try {
            //将转换成的Workbook对象通过流形式下载
            createWorkBook(list,keys,columnNames).write(os);
        } catch (IOException e) {
            e.printStackTrace();
        }
        byte[] content = os.toByteArray();
        InputStream is = new ByteArrayInputStream(content);
        // 设置response参数,可以打开下载页面
        response.reset();
        response.setContentType("application/vnd.ms-excel;charset=utf-8");
        response.setHeader("Content-Disposition", "attachment;filename="+ new String((fileName + ".xls").getBytes(), "iso-8859-1"));
        ServletOutputStream out = response.getOutputStream();
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;
        try {
            bis = new BufferedInputStream(is);
            bos = new BufferedOutputStream(out);
            byte[] buff = new byte[2048];
            int bytesRead;
            while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
                bos.write(buff, 0, bytesRead);
            }
        } catch (final IOException e) {
            throw e;
        } finally {
            if (bis != null)
                bis.close();
            if (bos != null)
                bos.close();
        }
    }
 
    private static List> createExcelRecord(List projects, String[] keys) {
        List> listmap = new ArrayList>();
        Map map = new HashMap();
        map.put("sheetName", "sheet");
        listmap.add(map);
        Object project=null;
        for (int j = 0; j < projects.size(); j++) {
            project=projects.get(j);
            Map mapValue = new HashMap();
            for(int i=0; i> list, String []keys, String columnNames[]) {
        // 创建excel工作簿
        Workbook wb = new HSSFWorkbook();
        // 创建第一个sheet(页),并命名
        Sheet sheet = wb.createSheet(list.get(0).get("sheetName").toString());
        // 手动设置列宽。第一个参数表示要为第几列设;,第二个参数表示列的宽度,n为列高的像素数。
        for(int i=0;i

3.pojo

public class Student {
    private int no;
    private String name;
    private int age;
    //此处省略getter和setter
}

4.配置controller
 

@RequestMapping(value = "download")
    public void index(HttpServletResponse response){
        String fileName = "人员档案列表";
 
        List students = new ArrayList();
        for (int i = 0;i<20 ;i++){
            Student student = new Student();
            student.setAge(i+10);
            student.setName("张三"+i);
            student.setNo(i);
            students.add(student);
        }
 
        // 列名
        String columnNames[] = { "ID", "姓名", "年龄" };
        // map中的key
        String keys[] = { "no", "name", "age" };
        try {
            ExcelUtil.start_download(response, fileName, students,columnNames, keys);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

5.页面

导出Excel

测试成功。。。
 

你可能感兴趣的:(测试,案例,POI)