侧边栏壁纸
博主头像
清如许博主等级

努力成长为一颗大树,一半洒落阴凉,一半沐浴阳光,非常沉默非常骄傲,从不依靠从不寻找

  • 累计撰写 80 篇文章
  • 累计创建 44 个标签
  • 累计收到 5 条评论

目 录CONTENT

文章目录

POI简介,以及使用POI技术实现Excel文件的导入导出案例.md

清如许
2020-04-25 / 0 评论 / 0 点赞 / 253 阅读 / 1,382 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-05-21,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

### 1、什么是POI?
Apache POI 是 Apache 软件基金会的开放源码函式库,POI 提供 API 给 Java 程序对
Microsoft Office 格式档案读和写的功能。

常用的两种java操作Excel技术POi和JXL的对比:
在这里插入图片描述
POI 和 JXL 对 Excel 抽象出来的对象对比
| | POI | JXL |
| :--------------: | :--------------: | :------: |
| Excel 文档 | HSSFWorkbook | Workbook |
| Excel 的工作表 | HSSFSheet | Sheet |
| Excel 的行 | HSSFRow | 无 |
| Excel 中的单元格 | HSSFCell | Cell |
| Excel 字体 | HSSFFont | |
| Excel 单元格样式 | HSSFCellStyle | |
| Excel 颜色 | HSSFColor | |
| 合并单元格 | CellRangeAddress | |

2、使用POI实现Excel的导入导出

先来回忆一下window使用Excel和POi对Excel抽象出来的对象

  1. 创建一个Excel文件 HSSFWorkbook
  2. 创建一张工作表 HSSFSheet
  3. 选中一行 HSSFRow
  4. 选中一个单元格 HSSFCell
  5. 在单元格中写入数据
  6. 保存

第一个demo Excel导出

1,导入POI依赖

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.11</version>
</dependency>

2,POI工具类实现导出
案例1:

package com.macw;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.junit.Test;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class PoiTest {

    @Test
    public void test1() throws IOException {
//        1.创建一个文件对象
        HSSFWorkbook hssfWorkbook = new HSSFWorkbook();

//        2.创建一个表对象 通过文件对象创建表对象
        HSSFSheet sheet = hssfWorkbook.createSheet("表名:excel数据表");

//        3.获取行对象 下标从0开始
        HSSFRow row = sheet.createRow(0);

//        4.获取第1个单元格  下标从0开始
        HSSFCell cell = row.createCell(0);

//        5.在单元格中写入数据
        cell.setCellValue("Hello Wolld");

//        6.保存在磁盘中 流  文件名的后缀必须有.xls
        hssfWorkbook.write(new FileOutputStream("E://demo.xls"));
    }
}
```java
案例2:
模拟从数据库查到的所有用户及用户信息导出到excel文件中
@RequestMapping("/exportAll")
public void exportAll(HttpServletResponse resp){
    //模拟从数据库查到的所有用户及用户信息
    List<User> users = new ArrayList<User>();
    User user = new User("1","张三 1","2019-8-10");
    User user1 = new User("2","张三 2","2019-8-10");
    User user2 = new User("3","张三 3","2019-8-10");
    User user3 = new User("4","张三 4","2019-8-10");
    User user4 = new User("5","张三 5","2019-8-10");
    User user5 = new User("6","张三 6","2019-8-10");
    User user6 = new User("7","张三 7","2019-8-10");
    User user7 = new User("8","张三 8","2019-8-10");
    users.add(user);
    users.add(user1);
    users.add(user2);
    users.add(user3);
    users.add(user4);
    users.add(user5);
    users.add(user6);
    users.add(user7);
    //创建工作薄
    HSSFWorkbook workbook = new HSSFWorkbook();
    //创建工作表
    HSSFSheet sheet = workbook.createSheet("用户信息");
    //设置列宽 第一个参数:列索引 第二个参数:列宽
    sheet.setColumnWidth(2, 4500);
    //创建导出样式
    HSSFCellStyle cellStyle = workbook.createCellStyle();
    //创建字体
    HSSFFont font = workbook.createFont();
    //设置字体颜色
    font.setColor(HSSFFont.COLOR_RED);
    //设置加粗
    font.setBold(true);
   
    //设置字体
    font.setFontName("宋体");
    //设置居中
    cellStyle.setAlignment(CellStyle.ALIGN_CENTER);
    //管理字体样式
    cellStyle.setFont(font);
    //创建标题栏
    HSSFRow row = sheet.createRow(0);
    HSSFCell cell = null;
    String[] titles = {"编号","真实姓名","出生年月"};
    for (int i = 0; i < titles.length; i++) {
        cell = row.createCell(i);
        cell.setCellValue(titles[i]);
    //标题行使用样式
        cell.setCellStyle(cellStyle);
    }
    for (int i = 1; i <= users.size(); i++) {
         //创建数据行对象
        row = sheet.createRow(i);
        //数据行第一列设值
        cell = row.createCell(0);
        cell.setCellValue(users.get(i-1).getUserId());
        //数据行第二列设值
        cell = row.createCell(1);
        cell.setCellValue(users.get(i-1).getRealname());
        //数据行第三列设值
        cell = row.createCell(2);
        cell.setCellValue(users.get(i-1).getDharmaName());
    }
    String fileName = "用户报表("+new
            SimpleDateFormat("yyyy-MM-dd").format(new Date())+").xls";
    //处理中文下载名乱码
    try {
        fileName = new  String(fileName.getBytes("utf-8"),"utf-8");
        //设置 response
        resp.setContentType("application/vnd.ms-excel");
        resp.setHeader("content-disposition","attachment;filename="+fileN
                ame);
       
        workbook.write(resp.getOutputStream());
        workbook.close();
    } catch (Exception e) {
    // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

3、POI导入

 @RequestMapping("/uploadIn")
    @ResponseBody
    public Map uploadIn(MultipartFile multipartFile) throws IOException {
        //输出文件名
        logger.info("----------文件名为: "+multipartFile.getOriginalFilename());
        //1,获取流对象
        InputStream inputStream = multipartFile.getInputStream();

//        2.通过poi解析流 得到 Excel文件对象
        HSSFWorkbook workbook = new HSSFWorkbook(inputStream);

//        3.通过对象获取数据 得到表
        HSSFSheet sheet = workbook.getSheetAt(0);

//        4.通过表 得到行
        int lastRowNum = sheet.getLastRowNum();
        //定义计数器,计算批量导入多少条数据
        int sum = 0;
        for (int i = 1; i <= lastRowNum; i++) {
            Guru guru = new Guru();
            HSSFRow row = sheet.getRow(i);
//            获取单元格
            double guruId = row.getCell(0).getNumericCellValue();
            guru.setGuruId((int) guruId);

            guru.setGuruName(row.getCell(1).getStringCellValue());
            guru.setGuruImage(row.getCell(2).getStringCellValue());
            guru.setGuruNickname(row.getCell(3).getStringCellValue());
            guru.setGuruStatus((int) row.getCell(4).getNumericCellValue());
            System.out.println(guru);
			//执行添加的SQL
            int insert = guruMapper.insert(guru);
            //统计添加成功的条数
            sum+=insert;
        }
        Map map = new HashMap();
        map.put("flag", sum+"");
        return map;
    }

页面代码:

<div id="insertFile" class="easyui-dialog" data-options="closed:true">
    <form id="insertFileForm" enctype="multipart/form-data" method="post">
        上传Excel文件:<input class="easyui-filebox" name="multipartFile"
                         data-options="required:true,missingMessage:'请选择文件'"/><br/><br/>
        <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-save" onClick="insertFileConfirm()">上传</a>
    </form>
</div>


js代码:

 //批量上传的文件提交
    function insertFileConfirm() {
        $("#insertFileForm").form("submit", {
            url: "${pageContext.request.contextPath}/guru/uploadIn",
            success: function (data) {
               console.log(data);
                alert("成功添加:"+data.flag+" 条数据");
                $("#insertFile").dialog("close");
                $("#guruManager").datagrid("reload");
            }
        })
    }
0

评论区