Java操作百万数据量Excel导入导出工具类(维护中)

百万数据的导入导出解决方案 因为在工作中遇到了大数据的导入和导出,问题既然来了逃跑不如干掉它!!!只要这一次解决了,后期遇到同样的问题就好解决了。废话不多说,开始撸起来!!!这次工作中遇到的问题也给我留下了深刻印象,同时也是我职业生涯添彩的一笔。最起码简历上可以写上你处理过上百万条数据的导入导出。 阅读详情

作者序言:把简单的事情做好、才做好更复杂的事情。

======================================================================

1、更新日志

1.response.reset();注释掉reset,否在会出现跨域错误。
2.可导出多个单元、poi官方建议大数据量解决方案:SXSSFWorkbook。
3.自定义下拉列表:对每个单元格自定义下拉列表。
4.数据遍历方式换成数组(效率较高)、可提供模板下载、每个表格的大标题[2018-09-14]
5.自定义列宽:对每个单元格自定义列宽[2018-09-18]
6.自定义样式:对每个单元格自定义样式[2018-10-22]-[2018-10-25修复]
7.自定义单元格合并:对每个单元格合并[2018-10-22]
8.固定表头[2018-10-23、自定义样式:单元格自定义某一列或者某一行样式[2018-10-30]
9.已解决 SimpleDateFormat 与 DecimalFormat 线程安全问题[2018-11-07]。 localhost01博友提出问题
10.版本3.0开始支持对象编程(之前都是直接调用函数、现支持先写入对象再调用)。[2018-12-07]
11.速度调优、修复100万数据导出内存溢出bug(临时方案)、解决本地测试报servlet找不到问题。[2019-01-31]
12.导入日期格式和数字小数点位数可自定义【看教程】。[2019-12-14]  
13、本地文件导入函数   ExcelUtils.importForExcelDataToFile(......)。[2020-02-21]             
14、删除 LocalExcelUtils.importForExcelData(......)方法。[2020-02-21]

1.1、版本说明 

以下这种没有提交到maven库,需要的话下载源代码使用(4.0版本没有以下功能) 
1、是否添加边框改为是否忽略边框?默认单元格都带边框。
2、添加导出图片。  
3、可设置默认列宽大小。默认是16
4、可设置默认字体大小。默认是12
5、删除:导出函数 ExcelUtils.exportForExcel(......)过期、4.0以下版本有。
6、本地文件导入函数   ExcelUtils.importForExcelDataToFile(......)。           
7、删除 LocalExcelUtils.importForExcelData(......)方法。    
<!--
maven:https://mvnrepository.com/artifact/com.github.andyczy/java-excel-utils
Excel导入导出教程文档:
    https://github.com/andyczy/czy-nexus-commons-utils/blob/master/README.md
    https://blog.youkuaiyun.com/JavaWebRookie/article/details/80843653
-->
<dependency>
     <groupId>com.github.andyczy</groupId>
     <artifactId>java-excel-utils</artifactId>
     <version>4.0</version>
</dependency>

2、实现功能

1、自定义导入数据格式,支持配置时间、小数点类型(支持单/多sheet)(2种方式:本地文件路径导入(只支持xls、xlsx格式)、MultipartFile 请求方式 )              
2、浏览器(response响应)导出Excel文件、模板文件(支持单/多sheet)           
3、指定路径导出Excel文件(支持单/多sheet)           
4、自定义样式:行、列、某个单元格(字体大小、字体颜色、左右对齐、居中、是否忽略边框。支持单/多sheet)           
5、自定义固定表头(支持单/多sheet)            
6、自定义下拉列表值(支持单/多sheet)           
7、自定义合并单元格、自定义列宽、自定义大标题(支持单/多sheet)
8、导出图片、图片地址和数据一样,只要是能访问的图片都可以导出(有需求、图片适应大小待解决),图片格式:.JPEG|.jpeg|.JPG|.jpg|.png|.gif

注:POI SXSSFWorkbook 最高限制1048576行,16384列(数据量大于1048576行,自行处理成多sheet形式)

3、外部链接教程

代码传送门 Git 地址 :

教程说明:https://github.com/andyczy/czy-nexus-commons-utils

工具仓库:https://github.com/andyczy/czy-study-java-commons-utils

开源中国:https://www.oschina.net/p/java-excel-utils(大家多多支持评论收藏)

该代码逻辑是经过多个项目和很多次验证,如果有更好的优化,如发现bug和有优化方案欢迎评论或者私信。支持的话记得评论,不然可能忘记~。

4、导出实现截图

直接列举,具体使用方法代码逻辑写的很清楚。

5、导入实例

多表格数据获取、从第几行开始获取、多单元根据那些列为空来忽略行数据。

导入不转换成对象,直接获取到数据(支持多sheet表格),直接获取数据更加方便、根据列循环获取数据。

1、本地文件路径导入(只支持xls、xlsx格式)

//  第一个表格从第三行开始获取
HashMap hashMapIndex = new HashMap();
hashMapIndex.put(1, 4);
Integer sheetSize = 2;
String filePath = "E:\\20200221145513.xlsx";
String excelType = "xlsx";
List<List<LinkedHashMap<String, String>>> importList = ExcelUtils.importForExcelDataToFile(filePath, excelType, sheetSize, hashMapIndex, null);

2、MultipartFile 请求方式 

//  第一个表格从第三行开始获取
HashMap hashMapIndex = new HashMap();
hashMapIndex.put(1, 4);
List<List<LinkedHashMap<String, String>>> list = ExcelUtils.importForExcelData(book, sheetNames, hashMapIndex, null);

结果集:[[{0=1, 1=小学, 2=1, 3=2, 4=3}, {0=2, 1=三中, 2=3, 3=4, 4=2}],[{0=1, 1=小学, 2=1, 3=2, 4=3}]] 

多个sheetList数据,键值对的形式。获取第一个sheet表格数据则:hashMapList.get(0).get("0");   //第一个表格第一列数据=1

1、Controller 代码  

    @RequestMapping(value = "/importExcelToData", method = RequestMethod.POST)
    @ResponseBody
    public Result importExcell(@RequestParam("proFile") MultipartFile proFile) {
        //导入的Excel单元表格名称顺序
        String[] sheetNames = new String[]{"导入测试"};
        Workbook book = null;
        try {
            if (!proFile.isEmpty()) {
                InputStream inputStream = proFile.getInputStream();
                String extName = fileName.substring(proFile.getOriginalFilename().lastIndexOf('.') + 1);
          
                if (StringUtils.equals("xls", extName)) {
                    book = new HSSFWorkbook(inputStream);
                } else if (StringUtils.equals("xlsx", extName)) {
                    book = new XSSFWorkbook(inputStream);
                } else {
                    return new Result(-1001, "无法识别的Excel文件,请下载模板文件,进行导入!");
                }
                return iService.importExcelToDataService(book, user.getId(), sheetNames);
            } else {
                return new Result(-1001, "模板文件为空!");
            }
        } catch (Exception e) {
            return new Result(-1001, "数据异常、请下载模本重新导入!");
        }
    }

 

6、get与post请求导出、请求区别

1、get 请求前端(方式一):
    window.open("请求地址URL?参数="+参数值);  //获取其他get请求方式

2、post请求前端(方式二):常见于参数是对象,get无法传参才使用。
    // post请求,将数据以流的方式返回,再进行处理。
    exportExcel(参数).then((res)=>{
            let blob = new Blob([res], {type: "application/vnd.ms-excel;charset=utf-8"});
            let url =window.URL.createObjectURL(blob);
            let link = document.createElement('a');
            link.download = '测试.xls';
            link.href = url;
            link.click();
    });

3、post 与 get 的区别,再请求头加上:responseType: 'blob'

    例如:axios 请求
        export function exportExcel(data) {
          return request({
              url: '/test/exportExcel',
              method: 'POST',
              responseType: 'blob',
              data
          });
        }


4、get 与 psot  Controller

    @RequestMapping(value = "/exportExcel",method = RequestMethod.POST)
    @ResponseBody
    public void exportLicensingRequirementExcel(HttpServletResponse response ,  @RequestBody LicensingRequirements licensingList) throws Exception{
        String excelName =  "测试Excel导出" + DateUtil.getNeededDateStyle(new Date(),"yyyyMMddHHmmss");
        String[] LabelNameList = new String[]{"sheet1"};
        String[] sheetNameList = null;
        String[] labelNameList = new String[]{excelName};
        //dataList 数据接口
        List<List<String[]>>  dataList = null;
        //自定义列宽
        //第几行样式
        ExcelUtils excelUtils = ExcelUtils.initialization();
        excelUtils.setLabelName(LabelNameList);
        excelUtils.setDataLists(dataList);
        excelUtils.setFileName(excelName);
        excelUtils.setResponse(response);
        excelUtils.setSheetName(LabelNameList);
        excelUtils.exportForExcelsOptimize();
    }


4、数据逻辑层
    @Override
    public List<List<String[]>> exportExcel(String 参数) {
        List<BaseEnterpriseInfo> list = null; //数据接口

        List<List<String[]>> listArray = new ArrayList<>();
        List<String[]> stringList = new ArrayList<>();
        String[] valueList = null;
        String[] headers = {"序号", "企业名称", "地址"};
        stringList.add(headers);
        for (int i = 0; i < list.size(); i++) {
                valueList = new String[]{(i + 1) + "", list.get(i).getEntName(), list.get(i).getDom()
            };
            stringList.add(valueList);
        }
        listArray.add(stringList);
        return listArray;
    }

7、案例程序说明(详细)

 

Java操作百万数据量Excel导入导出工具类(程序代码教程)

工具教程:https://blog.youkuaiyun.com/JavaWebRookie/article/details/104745571

 

excel百万数据如何导入导出? 因为你所创建的book,Sheet,row,cell等在写入到Excel之前,都是存放在内存中的(这还没有算Excel的一些样式格式等等),可想而知,内存不溢出就有点不科学了!限制了用户的下载数量每次最多只能有四个人同时下载,并且控制每个用户最大的导出数据最多只能是20w,与此同时他们也是使用的JDBC分批导入,但是并没有手动控制事务。2、其次就是往DB里插入,怎么去插入这20w条数据,当然不能一条一条的循环,应该批量插入这20w条数据,同样也不能使用Mybatis的批量插入语,因为效率也低。 阅读详情

相关推荐

excel导入导出

poi实现excel导入导出,官方文档也放在文档开头

weixin_41579606的博客 2274

Java操作百万数据量Excel导入导出工具类(程序代码教程)

Java操作百万数据量Excel导入导出工具类(程序代码教程): # czy-nexus-commons-utils (本库)[https://github.com/andyczy/czy-nexus-commons-utils],是发布到 [search.maven](https://search.maven.org/) 、 [mvnrepository](https://mvnre...

用心做每件事 5134

Java Web开发中Excel导入导出工具类实战详解

在现代企业级Java应用中,处理Excel文件已成为不可或缺的技术能力。无论是财务系统中的账单导出、人力资源系统的员工信息批量导入,还是电商平台的商品库存同步,都离不开对Excel文档的读写操作。而Apache POI作为Java平台上最成熟、功能最全面的Office文档处理库之一,提供了完整的API支持XLS和XLSX格式的Excel文件操作。本章将深入剖析Apache POI的核心对象模型及其底层机制,重点围绕WorkbookSheetRow和Cell。

weixin_42612405的博客 847

Java-读入10万个int数据超时了

今天遇见一个问题,采用c++写法,可以通过测试,但是采用Java时,同样的代码就是不行 131. 直方图中最大的矩形 Java代码 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.*; public class Main { static int N=100010; static int []h=new i

fxwentian的博客 323

Java高效大数据量Excel导出与模板设计实战

数据预处理是数据分析的关键步骤,涵盖了从原始数据集中去除无关或重复信息,识别和处理异常值,以及整理数据格式等一系列操作。其目的在于提高数据质量,为后续的数据分析或机器学习模型提供准确的数据支撑。在处理大规模数据导出时,传统的和可能会遇到性能瓶颈。这是因为这两个类在内存中构建了整个Excel文件的数据结构,对于大数据量而言,这将消耗大量内存资源,并且当数据量超过一定阈值时,操作会变得异常缓慢。Apache POI提供的类是为了解决这个问题而生的。

weixin_42504649的博客 1111

Java操作Excel的Apache POI实战手册

Apache POI 并不可怕,只要你明白这几个核心原则:统一接口优于具体实现→ 多用WorkbookSheet接口永远不要假设数据完整→ 判空、判类型、容错处理样式必须复用→ 否则迟早 OOM大文件必须流式处理→是救命稻草资源一定要释放→dispose()用户体验很重要→ 异步 + 进度反馈 = 专业感拉满掌握了这些,你不仅能轻松应对日常开发需求,还能在技术评审时自信地说:“这个需求我熟,半小时搞定。”😎。

weixin_35752233的博客 847

Java操作百万数据量Excel导入导出工具类(一直维护中)

原文链接:https://blog.youkuaiyun.com/javawebrookie/article/details/80843653

zhaipengfei1231的博客 786

网格自适应_Comsol案例解析17:自适应网格的使用

本期导读自适应网格细化有许多优势,比如可以不用对网格进行全局加密,增加计算精度,又会降低求解自由度。本期仍然以气泡上升案例为例,在两相流模块中使用自适应网格。【打开案例模型】【修改网格】适当让气泡边界加密,注意,曲率因子越小,曲线上的网格越密【添加自适应网格】使用默认的参数即可,这里的误差指示器用的是水平集phi。可以根据具体求解模型选择适当的自变量作为误差指示器。【口诀】默认的一般是最...

weixin_28726871的博客 5682

POI Excel导入导出(上)

常见的Excel操作工具有JXL、POI等。JXL只能对Excel进行操作,属于比较老的框架,而且只支持到Excel95-2000版本,现在已经停止更新和维护,这里不做过多介绍。POI是Apache的项目,可以对微软/WPS的Word、Excel、PPT甚至OutLook进行操作。说这句话目的只有一个,就是告诉大家POI不仅仅只能处理Excel,Word、PPT这些办公组件也同样适用。但实际开发中处理Excel的场景几乎占了95%以上,所以我们只介绍POI处理Excel的部分。

smart_an的专栏 1215

西门子200SMART自定义库开发实战:从PID到露点算法的工业应用

本文详细介绍了西门子200SMART自定义库开发实战,涵盖从PID控制到露点算法的工业应用。通过代码封装技巧、多语言支持和性能优化等高级开发方法,帮助工程师提升PLC编程效率。文章特别强调了自创库在实际项目中的优势,如恒温恒湿控制系统的成功案例,展示了自定义库在工业自动化中的强大应用价值。

lake5的博客 1029

科研党必备:Python脚本批量下载DOI文献的保姆级教程(附避坑指南)

本文为科研人员提供了一份详细的Python脚本批量下载DOI文献的教程,涵盖环境配置、核心功能实现、性能优化及常见问题解决。通过自动化脚本,研究者可高效完成文献批量下载,显著提升科研工作效率,特别适合需要处理大量文献的研究团队使用。

weixin_26965807的博客 479

POI报表及百万数据导入导出方案

1、POI报表的概述 1.1 需求说明 在企业级应用开发中,Excel报表是一种最常见的报表需求。Excel报表开发一般分为两种形式:为了方便操作,基于Excel的报表批量上传数据;通过java代码生成Excel报表。 1.2 Excel的两种形式 目前世面上的Excel分为两个大的版本Excel2003和Excel2007及以上两个版本,两者之间的区别如下: Excel2003是一个特有的二进...

qqxhb 资源共享 1087

【实战指南】OpenClaw 使用 Bird Skill 接入 X(Twitter)的终极省心方案:告别每次都要手动喂 Cookie 的痛苦

OpenClaw 使用 Bird Skill 接入 X(Twitter)的终极省心方案:告别每次都要手动喂 Cookie 的痛苦

hampeter的博客 1802

EasyExcel百万数据量导入导出源码:一款提升数据处理效率的利器

EasyExcel百万数据量导入导出源码:一款提升数据处理效率的利器 去发现同类优质开源项目:https://gitcode.com/ 在当今信息化时代,数据已成为企业的重要资产,而对数据的处理效率则直接关系到企业的运营效率。EasyExcel百万数据量导入导出源码,正是为了解决这一痛点而诞生的一款高效工具。 项目介绍 EasyExcel 是基于 Apache POI 开发的一款开源 Java 库...

gitblog_06781的博客 755

5G NR上行控制信道PUCCH

一、PUCCH概述 PUCCH用于承载上行控制信息,相比LTE,NR PUCCH支持5种不同的格式,按照时域上所占用的符号数量可以分为短格式和长格式两种,如下表所示,短格式占用1-2个符号,可以承载1-2bit信息,长格式占用4-14个符号,可承载大于2bit的信息。NR引入短格式PUCCH的目的是可以缩短HARQ-ACK反馈的时延,长格式仍然是考虑到持续时间长可以保证覆盖。 NR中,考虑到系...

一个关于5G NR的博客^^ 3万+

从工业夹爪到Shadow Hand:一文看懂机器人灵巧手的硬件进化史(附避坑指南)

本文详细解析了机器人灵巧手从工业夹爪到Shadow Hand的硬件进化历程,涵盖刚性夹持器、自适应夹持器到多指灵巧手的技术突破。文章还提供了选购指南与技术避坑策略,帮助读者根据操作复杂度和环境结构化程度选择最适合的解决方案,适用于制造业、医疗和服务业等多个领域。

weixin_29074409的博客 486

《SpringBoot》EasyExcel实现百万数据的导入导出

在日常的开发工作中,Excel 文件的读取和写入是非常常见的需求,特别是在后台管理系统中更为频繁,基于传统的方式操作excel通常比较繁琐,EasyExcel 库的出现为我们带来了更简单、更高效的解决方案。本文将介绍 EasyExcel 库的基本用法和一些常见应用场景,帮助开发者更好地利用 EasyExcel 提高工作效率。GitHub - alibaba/easyexcel: 快速、简洁、解决大文件内存溢出的java处理Excel工具Easy Excel 官网 (alibaba.com)

sdgfafg_25的博客 1812

利用HTML+CSS设计PPT:html-to-pptx实现自动化转换与可编辑输出

在办公自动化和前端开发领域,将网页技术应用于文档生成是一个重要的技术方向。其核心原理在于通过解析HTML/CSS的结构与样式,将其映射为目标文档的原生对象模型。这项技术的价值在于,它能够将Web技术栈强大的布局与样式能力(如Flexbox、CSS Grid)与办公软件(如Microsoft PowerPoint)的广泛兼容性和可编辑性相结合。在实际应用场景中,这种技术特别适合需要快速生成兼具设计感与实用性的演示文稿,例如数据报告、产品发布和营销材料。本文探讨的html-to-pptx项目正是这一思路的工程实

weixin_30652491的博客 488

【工具类】EasyPOI 操作 Excel 工具类

Excel导入导出工具类摘要 该工具类基于Easypoi实现Excel文件的导入导出功能,主要特点包括: 导出功能: 支持大数据导出(downloadBigExcel)和普通导出(downloadExcel) 可设置Sheet名称和Excel类型(XSSF) 最大支持20万条数据导出 导入功能: 从MultipartFile或InputStream导入数据 支持设置标题行、表头行等参数 提供两种导入方式:基本导入(importExcel)和带校验结果的导入(importExcelMore) 辅助功能: 使用

Jason 512

使用微信小程序开发制作一个简单的在线问答应用

以上就是一个简单的在线问答小程序的开发过程。其中包括前端界面的布局和逻辑,后端接口的设计和实现,以及部署和测试的步骤。通过以上步骤,你可以自己尝试开发一个类似的在线问答应用。

2401_85258012的博客 800

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

EasyExcel实现百万数据的导入导出

在日常的开发工作中,Excel 文件的读取和写入是非常常见的需求,特别是在后台管理系统中更为频繁,基于传统的方式操作excel通常比较繁琐,EasyExcel 库的出现为我们带来了更简单、更高效的解决方案。本文将介绍 EasyExcel 库的基本用法和一些常见应用场景,帮助开发者更好地利用 EasyExcel 提高工作效率。代码地址:https://github.com/alibaba/easyexcel官网地址:Easy Excel 官网 (alibaba.com)

AlbenXie的博客 413

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

EasyExcel百万数据量导入/导出源码

EasyExcel百万数据量导入/导出源码 去发现同类优质开源项目:https://gitcode.com/ EasyExcel 是一款基于 Apache POI 的开源 Java 库,专门用于处理 Excel 文件的导入和导出操作。本仓库提供的源码是博主根据实际业务应用场景,使用 EasyExcel 实现的百万级别数据高效率导入/导出的示例。 本示例通过一个简单的 demo 展示了如何利用 Ea...

gitblog_06759的博客 374

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

easyexcel导出百万级数据_百万级别数据Excel导出优化

weixin_398509812020-11-29 21:08:52 938正在上传…重新上传取消​收藏5 文章标签:easyexcel导出百万级数据excel一次滚动太多excel翻页不连续java导出数据到excel模板java导出数据到excel表格java导出超过65535 这篇文章不是标题党,下文会通过一个仿真例子分析如何优化百万级别数据Excel导出。 笔者负责维护的一个数据查询和数据导出服务是一个相对远古的单点应用,在上一次云迁移之后扩展为双节点部署...

竹林幽深 5652

Java操作Excel的相关技术

Java操作Excel的相关技术 1 POI报表概述 1.1 背景说明 java代码操作excel有两种api类库 jxl (只能操作旧版本的excel) poi(新的和旧的excel版本都能操作) 常见的应用场景: 为了方便操作,基于Excel的报表批量上传数据 通过java代码生成Excel报表导出 1.2 Excel的两种形式 目前世面上的Excel分为两个大的版本Excel2003和Excel2007及以上两个版本. Excel2003是一个特有的二进制格式,其核心结构是复合文档类型的结

ABestRookie的博客 3047

Java操作Excel技术选型

Java操作Excel技术选型

WayneHu的博客 1315
上一篇: Python豆瓣电影首页类别爬虫小案例 之词法分析数据采集项目
下一篇: 深度学习笔记—什么是神经网络与TensorFlow实现神经网络?
AndyChen9988
博客等级 码龄11年 276粉丝 89原创
评论 88
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值