当前位置:首页 > 实用技巧 >

百万excel数据导入java(java导入excel详细教程)

来源:原点资讯(www.yd166.com)时间:2023-05-11 06:42:31作者:YD166手机阅读>>

在项目开发中,开发人员在编写代码过程中或多或少都要涉及到直接将固定格式的数据文件内容导入到系统中,例如将一个存放员工信息的Excel文件导入到系统中。以员工信息导入为例,大部分程序员的做法步骤如下:

  1. 在员工管理页面提供导入功能,让用户可以上传员工Excel文件;
  2. 服务器端采用POI或其它工具读取Excel工作表中每行数据;
  3. 创建一个User对象,读取每行单元格内容,验证单元格数据是否合法,如果合法调用User对象对应setter方法进行赋值;
  4. 保存User对象,继续处理下一行数据。

一般项目都会涉及到至少一个以上的导入,每个导入功能都要重复上述步骤,特别是在对第三步中读取转换时,涉及的代码会更多、更为复杂。为了减少开发人员重复编写数据导入代码的负担,增强导入代码可读性,作者结合本人经验开发了一套excel-data-transformer工具用于简化在步骤2、3中的代码编写复杂度。

excel-data-transformer是什么?
  • 遵循Apache 2.0协议;
  • 非常方便的将Excel、CSV及其它文件中的数据直接转换为指定对象;
  • 直接在转换类的setter上增加验证注解,无需对字符、数字等硬编码验证;
  • 采用流式方式处理,支持对大文件的解析、转换;
  • 扩展方便,可以轻松的增加自定义的文件解析类;
excel-data-transformer如何简化代码?
  • 实现了对Excel和CSV格式文件的解析,无需编写文件读取代码;
  • 采用注解方式实现对解析数据的合法性认证,自动将文件表头列名映射到类下;
excel-data-transformer如何使用?
  • 在转换类的setter方法上增加@ExcelColumn(指定对应转换文件的列名)、@NumberDesc(数字转换、验证)、@StringDesc(字符串转换、验证)、@DateDesc(日期转换、验证)、@CustomDesc(自定义验证器)等注解;其中@ExcelColumn是必须要增加的;

public class User { private String name; private int age; private Date birthday; private String email; public String getName() { return name; } @ExcelColumn(name = "姓名", required = true, trim = true) @CustomDesc(handler = "nameHandler") public void setName(String name) { this.name = name; } public int getAge() { return age; } @ExcelColumn(name = "年龄", trim = true) @NumberDesc(min = "0", max = "100") public void setAge(int age) { this.age = age; } public Date getBirthday() { return birthday; } @ExcelColumn(name = "出生日期", trim = true) @DateDesc(pattern = "yyyy年MM月dd日") public void setBirthday(Date birthday) { this.birthday = birthday; } public String getEmail() { return email; } @ExcelColumn(name = "Email", trim = true) @StringDesc(pattern = StringRegex.EMAIL) public void setEmail(String email) { this.email = email; } @Override public String toString() { return "User [name=" name ", age=" age ", birthday=" birthday ", email=" email "]"; } }

  • 如果有自定义转换类,需要将自定义转换类放到Map中,且key对应的值和@CustomDesc注解中的handler一致。如果没有可忽略此步。

/** * 员工姓名自定义转换器 * * @author wangguobin * */ public class NameHandler extends CustomTypeHandler<String> { public NameHandler() { } public NameHandler(Method method) { super(method); } @Override protected String transform(Object value) { return "Ext" value; } }

  • 对数据进行转换。

public class DataTransformerTest { @Test public void transform() { try (InputStream in = new FileInputStream(new File("/home/wangguobin/test/用户.xlsx"))) { // Excel数据转换 TableFileReader excelReader = new POIXLSXExcelReader(in); transform(excelReader); System.out.println("----------------------------"); // CSV数据转换 TableFileReader csvReader = new CSVFileReader("/home/wangguobin/test/用户.csv"); transform(csvReader); } catch (Exception e) { e.printStackTrace(); } } private void transform(TableFileReader excelReader) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NotFoundColumnException, IllegalParameterNumException, NotSupportTypeException, TransformerException { Map<String, CustomTypeHandler<?>> mapTypeHandler = new HashMap<String, CustomTypeHandler<?>>(); // 将自定义转换器放到map中,key值必须和@CustomDesc(handler = "nameHandler")中的handler值一致 mapTypeHandler.put("nameHandler", new NameHandler()); // 逐行读取文件数据,并将数据转换为指定的类 DataTransformer.transform(excelReader, User.class, new TransformHandler<User>() { @Override public void success(User rst) { // 处理转换成功的后续处理代码... } /** * @param pos 行号 * @param rowData 错误行原始数据 * @param errorMsg 错误消息 */ @Override public void error(int pos, Object[] rowData, String errorMsg) { // 转换失败的后续代码... } }, mapTypeHandler); } }

通过上述简单操作即可快速、方便的将文件数据转换为对象,excel-data-transformer下载地址:

https://github.com/binxigogo/excel-data-transformer

欢迎大家下载并提出指导意见。

栏目热文

java上传和导入excel(java读取上传的excel文件)

java上传和导入excel(java读取上传的excel文件)

一、需求说明通过接口上传一个姓名号码表,返回一个"姓名,号码"格式的的一个String数组。二、功能实现...

2023-05-11 07:03:20查看全文 >>

java将大量excel数据导入数据库(java操作excel直接导入数据库)

java将大量excel数据导入数据库(java操作excel直接导入数据库)

1、导入模板是用来给系统使用者在导入数据时使用的,有了导入模板就相当于有了一个导入的规范,确定需要导入哪些列来让使用者填...

2023-05-11 06:50:45查看全文 >>

java将excel导入数据库(java操作excel直接导入数据库)

java将excel导入数据库(java操作excel直接导入数据库)

由于篇幅有限,csdn的上传在60M内,jar包加起来就超过了,这里只保存了关键的源代码,想要详细的源代码可以私信我。...

2023-05-11 07:21:45查看全文 >>

java操作excel表导入数据库(java操作excel导入表)

java操作excel表导入数据库(java操作excel导入表)

如果项目经理给你一个Excel表格数据,让你把这些数据插入数据库,你会怎么操作?大部分想的就是通过Java代码拼接成S...

2023-05-11 06:47:07查看全文 >>

java把excel表格数据导入到数据库(java实现导入excel数据到数据库)

java把excel表格数据导入到数据库(java实现导入excel数据到数据库)

工作中,我们如果在大公司上班,经常有程序员和非程序员之分,而且公司大了,每天都要产生大量数据,怎么储存数据呢?对于程序员...

2023-05-11 07:16:42查看全文 >>

java导入excel的思路(java大量excel数据导入)

java导入excel的思路(java大量excel数据导入)

1. 构建项目使用Spring Boot快速构建一个Web工程,并导入与操作Excel相关的poi包以及一些常用的工具类...

2023-05-11 06:48:51查看全文 >>

java完整excel导入mysql数据库(java读取excel文件并导入数据库)

java完整excel导入mysql数据库(java读取excel文件并导入数据库)

看过我之前分享的朋友,应该知道之前我用 ,需要导入大量的数据,也就研究了一下如何在后台批量导入大量的数据。因为源数据都是...

2023-05-11 07:10:10查看全文 >>

java导入导出excel的工具包(java excel导入导出工具)

java导入导出excel的工具包(java excel导入导出工具)

前言在开发应用系统的时候,导出文件是必不可放的功能。以前用过poi、easyexcel等工具的导入导出功能,但总感觉太麻...

2023-05-11 06:44:54查看全文 >>

java将数据导入excel(java将数据写入excel)

java将数据导入excel(java将数据写入excel)

程序员创业记跟大家分享一款excel组件,之所以分享这款,是因为它在处理excel时很方便,我将百万数据导出到excel...

2023-05-11 07:23:58查看全文 >>

java读取excel数据库(java获取数据库中的数据到excel中)

java读取excel数据库(java获取数据库中的数据到excel中)

前言:本篇博客读写Excel使用的是EasyExcel,EasyExcel是一个基于Java的简单、省内存的读写Exce...

2023-05-11 06:49:26查看全文 >>

文档排行