最近项目上需要用到 Excel 的导入导出功能,想着之前使用的都有点麻烦,所以结合多方资料,终于找到了这个还算不错的 Excel 处理工具,一起来看

  • 今日安利好物名为 Hutool-poi

  • Hutool-poi 是什么?

    Java 针对MS Office的操作的库屈指可数,比较有名的就是Apache的POI库。这个库异常强大,但是使用起来也并不容易。Hutool针对POI封装一些常用工具,使Java操作Excel等文件变得异常简单。

    Hutool-poi是针对Apache POI的封装,因此需要用户自行引入POI库,Hutool默认不引入。到目前为止,Hutool-poi支持:

    Excel文件(xls, xlsx)的读取(ExcelReader)

    Excel文件(xls,xlsx)的写出(ExcelWriter)

  • Hutool-poi 有什么作用?

    Hutool-poi 包含了对 Excel 读取和写出的多种 API 封装

    ExcelUtil Excel工具类,读取的快捷方法都被封装于此

    ExcelReader Excel读取器,Excel读取的封装,可以直接构造后使用。

    ExcelWriter Excel生成并写出器,Excel写出的封装(写出到流或者文件),可以直接构造后使用

  • Hutool-poi 能帮我干什么?

    这里我们用 Hutool-poi 来简单实现 Excel 的导入导出

01

引入相关依赖

引入 基础相关依赖

   <dependency>      <groupId>org.apache.poigroupId>      <artifactId>poiartifactId>      <version>3.17version>  dependency>  <dependency>       <groupId>org.apache.poigroupId>       <artifactId>poi-ooxmlartifactId>       <version>3.17version> dependency><dependency>    <groupId>xercesgroupId>    <artifactId>xercesImplartifactId>    <version>2.11.0version>dependency>

02

实现 Excel 导入导出

1、FileUtil 类

package me.zhengjie.service.impl;import cn.hutool.core.io.IoUtil;import cn.hutool.core.util.IdUtil;import cn.hutool.poi.excel.BigExcelWriter;import cn.hutool.poi.excel.ExcelUtil;import cn.hutool.poi.excel.sax.handler.RowHandler;import com.alibaba.fastjson.JSONArray;import org.springframework.web.multipart.MultipartFile;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServletResponse;import java.io.*;import java.text.SimpleDateFormat;import java.util.*;/** * File工具类,扩展 hutool 工具包 * * @author Zheng Jie * @date 2018-12-27 */public class FileUtil extends cn.hutool.core.io.FileUtil {    private static ListObject>> lineList =     /**     * 获取文件扩展名,不带 .     */    public static String getExtensionName(String filename) {        if ((filename != null) && (filename.length() > 0)) {            int dot = filename.lastIndexOf('.');            if ((dot > -1) && (dot < (filename.length() - 1))) {                return filename.substring(dot + 1);            }        }        return filename;    }    /**     * Java文件操作 获取不带扩展名的文件名     */    public static String getFileNameNoEx(String filename) {        if ((filename != null) && (filename.length() > 0)) {            int dot = filename.lastIndexOf('.');            if ((dot > -1) && (dot < (filename.length()))) {                return filename.substring(0, dot);            }        }        return filename;    }    /**     * 将文件名解析成文件的上传路径     */    public static File upload(MultipartFile file, String filePath) {        Date date = new Date();        SimpleDateFormat format = new SimpleDateFormat("yyyyMMddhhmmssS");        String name = getFileNameNoEx(file.getOriginalFilename());        String suffix = getExtensionName(file.getOriginalFilename());        String nowStr = "-" + format.format(date);        try {            String fileName = name + nowStr + "." + suffix;            String path = filePath + fileName;            // getCanonicalFile 可解析正确各种路径            File dest = new File(path).getCanonicalFile();            // 检测是否存在目录            if (!dest.getParentFile().exists()) {                dest.getParentFile().mkdirs();            }            // 文件写入            file.transferTo(dest);            return dest;        } catch (Exception e) {            e.printStackTrace();        }        return null;    }    /**     * 导出excel     */    public static void downloadExcel(ListString,         String tempPath = System.getProperty("java.io.tmpdir") + IdUtil.fastSimpleUUID() + ".xlsx";        File file = new File(tempPath);        BigExcelWriter writer = ExcelUtil.getBigWriter(file);        // 一次性写出内容,使用默认样式,强制输出标题        writer.write(list, true);        //response为HttpServletResponse对象        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");        //test.xls是弹出下载对话框的文件名,不能为中文,中文请自行编码        response.setHeader("Content-Disposition", "attachment;filename=file.xlsx");        ServletOutputStream out = response.getOutputStream();        // 终止后删除临时文件        file.deleteOnExit();        writer.flush(out, true);        //此处记得关闭输出Servlet流        IoUtil.close(out);    }    /**     * excel导入工具类     *     * @param file       文件     * @param columNames 列对应的字段名     * @return 返回数据集合     * @throws IOException     */    public static ListString,         FileInputStream inNew = new FileInputStream(file);        if (file.getPath().endsWith(".xlsx")) {            //读取数据            ExcelUtil.read07BySax(file, 0, createRowHandler());        }        if (file.getPath().endsWith(".xls")) {            //读取数据            ExcelUtil.read03BySax(file, 0, createRowHandler());        }        //去除excel中的第一行数据        lineList.remove(0);        //将数据封装到list中        ListString,         for (int i = 0; i < lineList.size(); i++) {            if (null != lineList.get(i)) {                Map<String, Object> hashMap = new HashMap<>();                for (int j = 0; j < columNames.length; j++) {                    Object property = lineList.get(i).get(j);                    hashMap.put(columNames[j], property);                }                dataList.add(hashMap);            } else {                break;            }        }        return dataList;    }    /**     * 通过实现handle方法编写我们要对每行数据的操作方式     */    private static RowHandler createRowHandler() {        //清空一下集合中的数据        lineList.removeAll(lineList);        return new RowHandler() {            @Override            public void handle(int sheetIndex, int rowIndex, List rowlist) {                //将读取到的每一行数据放入到list集合中                JSONArray jsonObject = new JSONArray(rowlist);                lineList.add(jsonObject.toJavaList(Object.class));            }        };    }}

2、导出

     public void downloadTemplate(HttpServletResponse response) throws IOException {        List> list = Lists.newArrayList();        Map map = Maps.newLinkedHashMap();        map.put("仓库编号", "");        map.put("仓库名称", "");        list.add(map);        FileUtil.downloadExcel(list, response);    }

3、导入

            public void uploadTemplate(HttpServletRequest request) throws IOException {        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;        Map fileMap = multipartRequest.getFileMap();        if (fileMap == null || fileMap.size() == 0) {            System.out.println("请上传文件,注意文件的name属性为file");        }        for (Map.Entry entry : fileMap.entrySet()) {            MultipartFile multipartFile = entry.getValue();            // 4.获取要保存的路径文件夹            String property = request.getSession().getServletContext().getRealPath("/");            property = property.substring(0, property.length() - 5) + "/upload/";            File file = FileUtil.upload(multipartFile, property);            List list = new ArrayList<>(); //list            list.add("warehouseCode");            list.add("warehouseName");            // list 转  string 数组            String[] str = list.toArray(new String[list.size()]);            List> leading = FileUtil.leading(file, str);            }   }

Hutool 中还有许多实用方法,感兴趣的小伙伴可以多研究下哦

https://hutool.cn/docs/#/

excel winform 导入 导出_强大的 Excel 导入导出工具 hutool相关推荐

  1. excel 复制 格式不变_ 如何复制Excel表格保持格式及列宽不变

    excel 复制 格式不变_ 如何复制Excel表格保持格式及列宽不变 == excel 粘贴的时候,经常格式就乱了,我们想要保持原来的样式. 有的之后粘贴后,右下角有个 图标 可以选择 保留原格式. ...

  2. 移动端excel导出_前端实现Excel导入和导出功能

    介绍 最近项目中让实现一个导入导出Excel的功能,查找了一些插件后发现js-xlsx这个插件,所以就尝试使用了一下,这里将使用方法和遇到的问题简单记录一下. SheetJS js-xlsx 是一款能 ...

  3. 移动端excel导出_手机联系人竟可导出到Excel?教你要如何做

    我们知道,如果想要将手机联系人导出到本地,那么一般会以VCF格式来储存.在手机或者电脑当中打开VCF格式可以直接导入联系人,但如果说要编辑修改联系人,就非常不方便了.另外,有时候我们会遇到需要批量修改 ...

  4. 当前页面excel导出_系统地学习Excel第03课,Excel的工作界面

    上一篇:02-Excel的基础知识 本篇内容结构如下: 本篇在章节中的位置 3. 工作界面 从 Excel 2007 版开始,Excel 的工作界面风格就一直延续至今,其中设置了一些便捷的工具栏和按钮 ...

  5. 新点软件怎么导入清单_表格软件excel怎样导入数据 | 新点软件怎么导入excel清单表格 表格有什么要求???...

    新点软件怎么导入excel清单表格 表格有什么要求??? 没有特别的要求. 导入EXCEL实要引入POI包,这是专门操excel的 poi 提供的只是对应的excel操作方法,要完成一个任务,自己想办 ...

  6. jeecg 导出的excel不能使用公式_微软:Excel公式是世界上使用最广泛的编程语言...

    喜欢就关注我们吧! 文|一君 微软近日推出了一项 Excel 公式构建的新功能 LAMBDA,正则测试阶段.LAMBDA 允许使用 Excel 自身的公式语言自定义功能,而过去,Excel 中需要通过 ...

  7. python自动翻译excel某一列_【python excel实例教程】怎样用Python将excel的某一列生成一个列表?...

    用python做一个登录程序通过后直接进入某个excel? 是要做python自动化办公吧,这个很不错的,让办公很方便快捷的 python excel进行接口自动化测试,目前只写成了利用多个sheet ...

  8. excel 区间人数柱状图_原来用Excel做数据分析如此简单!

    大家好,我是你们的勾妹,今天又来送干货啦. 在上期<分享两个用Excel处理数据的神技巧>中,我们重点讲了 vlookup 函数和透视表功能,今天再来给大家介绍几个非常实用的技能. 数据分 ...

  9. python打开excel执行vba代码_“Python替代Excel Vba”系列(终):vba中调用Python

    请关注本号,后续会有更多相关教程. 系列文章 学Python还不会处理Excel数据?带你用pandas玩转各种数据处理"Python替代Excel Vba"系列(二):panda ...

最新文章

  1. 如何解决…has been modified since the precompiled header… was built的问题
  2. canvas画柱状图 和饼图
  3. cadence高速电路设计 光盘_嘉定区高速复印机租赁费用
  4. linux 用户态 隐藏进程 简介
  5. mysql的一个字段最多能插入多少数据?我们存入text类型的值上限是多大?
  6. 项目总结二:人脸识别项目(Face Recognition for the Happy House)
  7. 12月23号 Foundation库NSString操作
  8. d3 line example debug 2015-05-31
  9. python大数据项目_(价值1280)大数据项目实战之Python金融应用编程
  10. greenfoot推箱子游戏_推箱子小游戏V2.0更新
  11. iPhone X 再曝新 Bug:电话无法接听!
  12. apache.commons.beanutils javabean转MapStirng,String对象
  13. 管螺纹如何标注_外螺纹、内螺纹的画法,非标准螺纹的画法,你还会画吗?
  14. 无线通信原理期末复习提纲
  15. 量化选股常见的策略模型
  16. Question | 怎样有效杜绝“羊毛党“的薅羊毛行为?
  17. 【Android开发经验】LayoutInflater—— 你可能对它并不了解甚至错误使用
  18. jdk8 stream
  19. Linux安装telnet软件包,Linux下安装telnet
  20. 用Java设计实现多实例多库查询

热门文章

  1. Linux源码编译(一):从头文件说起
  2. 将自己可能存放库文件的路径都加入到/etc/ld.so.conf中是明智的选择
  3. 【Python】函数外定义变量并在函数内进行更新
  4. 科大星云诗社动态20210509
  5. [MATLAB学习笔记]matlab结构体A.B
  6. 台湾大学林轩田机器学习基石课程学习笔记1 -- The Learning Problem
  7. matlab 现代信号处理,The-first-matlab-exercise 清华大学张旭东老师现代信号处理第一次matlab习题 - 下载 - 搜珍网...
  8. Spatial Pyramid Pooling(空间金字塔池化)-变尺度CNN训练
  9. OpenGL编程指南1:OpenGL简介
  10. 封装的可运行于winform与web的Log4Net的类库