程序员:Java操作导出excel的三种方法,POI、easyExcel、Hutool

[复制链接]

下载APP可以快速和圈友联系

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
前言

比来在开辟一个治理背景,有一些excel的导出和导入操纵,之前都是利用POI操纵excel,这一次尝试了此外人组件:easyExcel和Hutool,明天就来分享一下,这三种方式中POI操纵导出excel。
利用POI导出2007格式的excel文件。

pom.xml

利用的是poi的3.13版本,此方式适用于老项目(利用时留意jar包抵触!)
<dependency>        <groupId>org.apache.poi</groupId>        <artifactId>poi</artifactId>        <version>3.13</version></dependency><dependency>        <groupId>org.apache.poi</groupId>        <artifactId>poi-ooxml</artifactId>        <version>3.13</version></dependency><dependency>        <groupId>org.apache.poi</groupId>        <artifactId>poi-ooxml-schemas</artifactId>        <version>3.13</version></dependency>`

// 在没有把握这个方式之前,请不要私行变动调集的key!!!!!!

调集预备:
//    封装 item 的调集 (数据终极封装的调集)Map<String, Object> data = new HashMap<String, Object>();//    封装 dataMap List<Map<String, Object>> item = new ArrayList<Map<String, Object>>();//    要导出的数据 map 调集(题目 + 数据)Map<String, Object> dataMap = new HashMap<String, Object>();//    题目 list 调集List<String> title = new ArrayList<String>();//    数据 list 调集List<Map<String, Object>> varList = new ArrayList<Map<String, Object>>();//    每一行数据的map调集 Map<String, Object> vpd = new HashMap<String, Object>(32);

数据预备
class Father{    private String name;    private int    age;    private String address;}List<Map<String, Object>> list = new ArrayList<>();for (int i = 0; i < 10; i++) {    Father fa = new Father();    fa.setName("姓名是:"+ i);    fa.setAge(i);    fa.setAddress("地址:"+ i);        list.add(fa);}题目列List<String> title = new ArrayList<String>();title.add("姓名");// 题目列1title.add("年龄");// 题目列2title.add("地址");// 题目列3dataMap.put("titles", title);
取出数据
for (int i = 0; i < list.size(); i++) {    Map<String, Object> vpd = new HashMap<String, Object>(32);    //    请留意,有几多列,var依照顺序停止排列    vpd.put("var1", list.get(i).getName());    vpd.put("var2", list.get(i).getAge());    vpd.put("var2", list.get(i).getAddress());    //     将每一行的数据,追加到调集 varList中。    varList.add(vpd);} 封装数据集dataMap.put("varList", varList);item.add(dataMap);//    终极封装的 导出的excel 的数据集data.put("data", item);

挪用导收工具类,停止导出(ExportExcel 实体类)
ExportExcel erv = new ExportExcel(); // 履行excel操纵String fileName = "XXXXXXXXXXXXXXXXXXXXX";//    方式一://    由于要将excel 成果返回到阅读器中,所以要把response传递到工具类中。erv.excelViewPoi(fileName, data, response);//    方式二://    也可以 设备 @RequestMapping 的参数produces = "application/vnd.ms-excel;charset=UTF-8" 办事端告诉客户端,响应的数据范例为excel

ExportExcel(导出excel 工具类)
package liren.office;import java.io.IOException;import java.io.OutputStream;import java.util.List;import java.util.Map;import org.apache.poi.ss.usermodel.CellStyle;import org.apache.poi.ss.usermodel.Font;import org.apache.poi.xssf.streaming.SXSSFCell;import org.apache.poi.xssf.streaming.SXSSFRow;import org.apache.poi.xssf.streaming.SXSSFSheet;import org.apache.poi.xssf.streaming.SXSSFWorkbook;/*** 导入到EXCEL* 类称号:ExportExcel .java* 类描写:导出2007格式的excel* @author LiRen* @version 1.0 */public class ExportExcel {        public void excelViewPoi(String fileName,Map<String, Object> model, HttpServletResponse response) {                        List<Map<String, Object>> list = (List<Map<String, Object>>)model.get("data");                SXSSFWorkbook workbook = new SXSSFWorkbook(10000);                for (Map<String, Object> map : list) {                        SXSSFSheet sheet;                        SXSSFCell cell;                        sheet = workbook.createSheet(String.valueOf(map.get("sheet")));                        List<String> titles = (List<String>) map.get("titles");                        int len = titles.size();                          CellStyle headerStyle = workbook.createCellStyle(); //题目款式                        headerStyle.setAlignment(CellStyle.ALIGN_CENTER);                        headerStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);                        Font headerFont = workbook.createFont();        //题目字体                        headerFont.setBoldweight(Font.BOLDWEIGHT_BOLD);                        headerFont.setFontHeightInPoints((short)11);                        headerStyle.setFont(headerFont);                        short width = 20,height=25*20;                        sheet.setDefaultColumnWidth(width);                        for(int i=0; i<len; i++){ //设备题目                                String title = titles.get(i);                                cell = getCell(sheet, 0, i);                                cell.setCellStyle(headerStyle);                                setText(cell,title);                        }                        sheet.getRow(0).setHeight(height);                        CellStyle contentStyle = workbook.createCellStyle(); //内容款式                        contentStyle.setAlignment(CellStyle.ALIGN_CENTER);                        List<Map<String, Object>> varList = (List<Map<String, Object>>) map.get("varList");                        int varCount = varList.size();                        for(int i=0; i<varCount; i++){                                Map<String, Object> vpd = varList.get(i);                                for(int j=0;j<len;j++){                                        String varstr = vpd.get("var"+(j+1)) != null ? vpd.get("var"+(j+1)).toString() : "";                                        cell = getCell(sheet, i+1, j);                                        cell.setCellStyle(contentStyle);                                        setText(cell,varstr);                                }                        }                }                OutputStream os=null;                try{                 os=response.getOutputStream();                 response.reset();                 //设备响应流                 response.setContentType("application/octet-stream");                 response.setCharacterEncoding("utf-8");                 response.setHeader("Content-Disposition", "attachment;filename="+fileName+".xlsx");                 response.setHeader("Access-Control-Allow-Origin", PropertiesHelper.getProperty("VUE_GZH_ADMIN","ipConfig.properties"));                          response.setHeader("Access-Control-Allow-Credentials", "true");                         workbook.write(os);                         workbook.dispose(); // 删除姑且文件                }catch (IOException e) {                                        }finally{                            try {                                os.flush();                                os.close();                                workbook.close();                            } catch (Exception e2) {                    }            }        }                private static SXSSFCell getCell(SXSSFSheet sheet, int row, int col) {                SXSSFRow sheetRow = sheet.getRow(row);                if (sheetRow == null) {                        sheetRow = sheet.createRow(row);                }                SXSSFCell cell = sheetRow.getCell(col);                if (cell == null) {                        cell = sheetRow.createCell(col);                }                return cell;        }        private static void setText(SXSSFCell cell, String text) {                cell.setCellType(SXSSFCell.CELL_TYPE_STRING);                cell.setCellValue(text);        }}


法式员:Java操纵导出excel的三种方式,POI、easyExcel、Hutool-1.jpg
温馨提示:
好向圈www.kuaixunai.com是一个专业经验分享交流平台,你可以在这里发布专业经验,也可以发布需求与服务,禁止带推广链接、联系方式、违法词等,违规将封禁账号。 下载好向圈APP可以随时随地交流经验,也可以和圈友发起聊天成为好友哦!
如果想要各大搜索引擎收录,请使用秘塔写作猫进行内容伪原创
回复

使用道具 举报

已有(2)人评论

跳转到指定楼层
灬柯爷灬y 发表于 2020-5-24 03:49:06
很早的时候还用过jxt
回复

使用道具 举报

123473536 发表于 2020-5-24 03:53:00
转发了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本圈子积分规则