首页 > 编程语言 >java实现excel导出和导入

java实现excel导出和导入

时间:2024-07-08 16:55:19浏览次数:23  
标签:java writer excel filename 导入 columnList new true response

1. 固定化模板导入导出

/**
 *  注意:需要指定列宽
 * @createTime 2022/4/22 16:59
 * @param: filename  文件名
 * @param: columnList 列名 别名  宽度
 * @param: orderList   数据源
 * 示例
 * ArrayList<String[]> columnList = new ArrayList<String[]>() {{
 * add(new String[]{"name", "名称", "25"});
 * }};
 * List<Map<String, Object>> lists=new ArrayList<>(){{
 * put("name","测试")
 * }}
 */
public static void mapDataToExcelStr(String filename, ArrayList<String[]> columnList, List<Map<String, String>> rows) {
    ExcelWriter writer = cn.hutool.poi.excel.ExcelUtil.getWriter(true);
    writer.renameSheet(filename);
    writer.getSheet().createFreezePane(0, 1);//固定第一行十五个列
    IntStream.range(0, columnList.size()).forEach(i -> {
        writer.addHeaderAlias(columnList.get(i)[0], columnList.get(i)[1]);
        writer.setColumnWidth(i, Integer.parseInt(columnList.get(i)[2]));
    });

    if (rows.isEmpty()) {
        List<String> head  = new ArrayList<>();
        columnList.forEach(n ->head.add(n[1]));
        writer.writeHeadRow(head);
    }else {
        for (int i = 0, rowsSize = rows.size(); i < rowsSize; i++) {
            Map<String, String> row = rows.get(i);
            LinkedHashMap<String, Object> row = new LinkedHashMap<>();
            for (String[] columnArr : columnList) {
                row.put(columnArr[0], row.get(columnArr[0]));
            }
            writer.writeRow(row, 0 == i);
        }
    }
    final HttpServletRequest request = HttpServletUtil.getRequest();
    final HttpServletResponse response = HttpServletUtil.getResponse();
    assert response != null;
    response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
    try (ServletOutputStream out = response.getOutputStream()) {
        response.setHeader("Content-Disposition", request.getHeader("USER-AGENT").contains("Safari")
                ? "attachment;filename=" + StrUtil.str(StrUtil.bytes(filename + ".xlsx", CharsetUtil.UTF_8), CharsetUtil.ISO_8859_1)
                : "attachment;filename*=utf-8'zh_cn'" + URLEncoder.encode(filename + ".xlsx", CharsetUtil.UTF_8));
        writer.flush(out, true);
        writer.close();// 关闭writer,释放内存
    } catch (IOException e) {
        e.printStackTrace();
    }
}

 二、自定义模板

    /**
     * 动态导出
     *
     * @param list  数据
     * @param response
     */
    public void writeExcel(List<Object> list, HttpServletResponse response) throws ExecutionException, InterruptedException, IOException {
        ExcelWriter writer = ExcelUtil.getWriter(true);
        try {
            writer.renameSheet(0, "示例1");
            writer.setSheet(0);
            writer.merge(0, 3, 0, 0, "序号", true);
            writer.merge(0, 3, 1, 1, "行政区划", true);
            writer.merge(0, 3, 2, 2, "项目名称", true);
            //所有列宽度设为18
            writer.setColumnWidth(-1, 18);
            //设置较宽列的宽度
            writer.setColumnWidth(11, 24);
            final List<ActualRepairAreaVOExcelDTO> actualDataList = new ArrayList<>();
            if (CollectionUtils.isNotEmpty(list)) {
                writer.setCurrentRow(4);
                writer.write(list, false);
            }
            writer.setSheet(1);
            writer.renameSheet("示例2");
            writer.merge(0, 3, 0, 0, "序号", true);
            writer.merge(0, 3, 1, 1, "行政区划", true);
            writer.merge(0, 3, 2, 2, "项目名称", true);
            //动态指定标题
            //标题集合
            List<String> titleList = new ArrayList<>();
            int f = 1;
            for (String title : titleList) {
                writer.merge(0, 3, f, f, title, true);
                f = f + 1;
            }
            int h = 1;
            //所有列宽度设为18
            writer.setColumnWidth(-1, 24);
            if (CollectionUtils.isNotEmpty(list)) {
                writer.setCurrentRow(4);
                writer.write(actualDataList, false);
            }
            //动态填充数据
            for (int i = 0, rowsSize = list.size(); i < rowsSize; i++) {
                Object obj = list.get(i);
                    writer.writeCellValue(h , i + 4, obj);
            }
            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
            response.setHeader("Content-Disposition", "attachment;filename=" + filename);
            writer.flush(response.getOutputStream());
//        } catch (Exception e) {
//            throw new RRException(e.getMessage());
        } finally {
            writer.close();
        }
    }

本文主要表达了固定模板以及动态模板导出的方式

标签:java,writer,excel,filename,导入,columnList,new,true,response
From: https://blog.csdn.net/qq_45132989/article/details/140272881

相关文章

  • Java计算机毕业设计基于的健身俱乐部管理系统(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着健康意识的普及和生活水平的提高,健身已成为现代人追求健康生活方式的重要组成部分。健身俱乐部作为提供专业健身服务和指导的场所,其管理效率和服......
  • openGauss 导入数据
    导入数据openGauss数据库提供了灵活的数据入库方式:INSERT、COPY以及gsql元命令\copy。各方式具有不同的特点,具体请参见表1。表1导入方式特点说明方式特点INSERT通过INSERT语句插入一行或多行数据,及从指定表插入数据。COPY通过COPYFROMSTDIN语句直接向openGa......
  • Java计算机毕业设计水果销售平台的设计与实现(开题+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着人们生活水平的提高和健康意识的增强,水果作为富含营养、美味可口的天然食品,其市场需求日益增长。然而,传统水果销售模式存在信息不对称、供应链冗......
  • Java计算机毕业设计基于的动漫网站设计与实现(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在数字化时代,动漫文化作为一种独特的艺术形式,在全球范围内拥有庞大的粉丝群体。随着互联网技术的飞速发展,动漫爱好者们越来越倾向于通过线上平台获取......
  • 朗致集团面试-JAVA开发面试过程
    面试过程总共有3轮面试第一轮是逻辑测试+性格测试,25道题目,要求90分钟内完成类似于公务员考试题目 如果通过,一般两天左右hr会联系你进行二面,需要按照视频面试软件面试软件:电脑下载安装【小鱼易连】下载地址:https://www.xylink.com/download。面试前一天面试官会联系您调试确......
  • Java计算机毕业设计基于的游乐园管理系统设计与实现(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着休闲娱乐产业的蓬勃发展,游乐园作为家庭出游、朋友聚会的重要场所,其管理与运营效率直接关系到游客的满意度和游乐园的盈利能力。传统游乐园管理模......
  • Java计算机毕业设计家政服务平台(开题+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着现代生活节奏的加快和家庭经济结构的多元化,家政服务需求日益增长,成为连接家庭与社会服务的重要桥梁。然而,传统家政服务市场存在信息不对称、服务......
  • java项目打包至生产环境流程
    一.打包:1.利用maven版本管理工具打包找到要打包的项目,先点击clean->install->package2.点击下包的服务3.点击+号,选择RunConfiguationType找到docker,添加4.出来一个弹窗配置一下生产环境的配置(地址)这里我已经配过了然后在这里可以看到我们的服务(以我的微服......
  • 从Java开发者到.NET Core初级工程师学习路线:C#语言基础
    1.C#语言基础1.1C#语法概览欢迎来到C#的世界!对于刚从Java转过来的开发者来说,你会发现C#和Java有很多相似之处,但C#也有其独特的魅力和强大之处。让我们一起来探索C#的基本语法,并比较一下与Java的异同。程序结构C#程序的基本结构与Java非常相似。这里是一个简单的C#程序:using......
  • Java读取properties文件之中文乱码问题及解决
    Java读取properties文件之中文乱码问题及解决−目录Java读取properties文件中文乱码两种方式读取properties配置文件方式一:使用Properties集合工具类读取配置文件。方式二:使用ResourceBundle工具类读取配置文件Java读写资源文件类properties1.资源文件要求如下2.功能大致如下3.......