Excel导入导出工具(简单、好用且轻量级的海量Excel文件导入导出解决方案.)

摘要:
它解决了一些常见问题,例如导入数据时的空行问题。它还可以导出数据。它完全支持日期格式的数据导入和导出。浮点数字的精确处理完美解决了导出时的中文列宽问题。它可以自定义列的顺序。它支持Excel公式。如果你发现一个bug,你可以提出一个问题,给我发一封电子邮件,并添加我的QQ,你可以进入9420技术小组讨论。作者QQ:2441719087作者邮箱:ningxiangsanri@163.com9420技术交流群:645576465作者微信:sanri1993-如何使用并上传到中央仓库。对maven地址的引用是<dependency><groupId>com。桑里。excelsanri-excel-poi1.0-REASE1234.目前,您需要下载代码来构建它,或者下载构建的发布包:https://gitee.com/sanri/sanri-excel-poi/repository/archive/v1.0-RELEASE?
Excel导入导出工具(简单、好用且轻量级的海量Excel文件导入导出解决方案.)
置顶 2019-09-07 16:47:10 $9420阅读数 261更多
分类专栏: java
 
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

Excel导入导出工具

项目地址:https://gitee.com/sanri/sanri-excel-poi
优点:简单的配置即可实现导出精美的 Excel 表格,可以不用配置来导入一列数据,导入 map 数据,简单配置可以导入实体数据。
解决了一些常见问题,比如

  1. 导入的时候空行问题
  2. 导入数据去前后空格
  3. 继承类也可以导出数据
  4. 完美的支持日期格式的导入导出
  5. 数字为浮点型的精度处理
  6. 完美解决导出时的中文列宽问题
  7. 可自定义列的顺序
  8. 支持 Excel 公式

发现BUG可以提Issue,可以给我发邮件,可以加我QQ,可以进9420技术群讨论.

作者QQ: 2441719087

作者邮箱: ningxiangsanri@163.com

9420 技术交流群: 645576465

作者微信:sanri1993-
在这里插入图片描述

如何使用

以后会上传中央仓库,引用 maven 地址为

<dependency>
	<groupId>com.sanri.excel</groupId>
    <artifactId>sanri-excel-poi</artifactId>
    <version>1.0-RELEASE</version>
</dependency>
 
  • 1
  • 2
  • 3
  • 4
  • 5

目前需要自己下载代码来构建,或下载已经构建好的 release 包 :

https://gitee.com/sanri/sanri-excel-poi/repository/archive/v1.0-RELEASE?format=zip

  • 还需要添加第三方依赖,如果项目中已经存在依赖,请忽略。(真实项目一般都是有依赖的)
<!-- Excel poi  -->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.10-FINAL</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.10-FINAL</version>
</dependency>

<!--apache commons -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.8.1</version>
</dependency>
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.6</version>
</dependency>
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-csv</artifactId>
    <version>1.2</version>
</dependency>

<!-- slf4j -->
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.21</version>
</dependency>
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

定义实体类

@ExcelExport
@ExcelImport(startRow = 1)
@Data
public class Simple {
    @ExcelColumn(value = "年龄",order = 2)
    private int age;
    @ExcelColumn(value = "级别",order = 1)
    private Integer level;
    @ExcelColumn(value = "姓名",order = 0,chineseWidth = true)
    private String name;
    @ExcelColumn(value = "生日",order = 3)
    private Date birthday;
    @ExcelColumn(value = "序号",order = 4,hidden = true)
    private long id;
    @ExcelColumn(value = "是否成功",order = 5)
    private boolean success;
    @ExcelColumn(value = "薪水",order = 6,precision = 2)
    private double money;
    @ExcelColumn(value = "奖金",order = 7,precision = 2)
    private float comm;
}
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

获取数据并导出

实测在 i5 3 代 cpu ,8 G 内存,导出 10 万数据,用时 5 秒

// 从数据库,redis,消息中间件...... 获取的数据
List<Simple> simpleList= simpleBeanDatas(10);
// 创建导出类
ExcelExportWriter excelExportWriter = new ExcelExportWriter(Simple.class);
// 开始导出
excelExportWriter.export(simpleList);
// 写到输出流
excelExportWriter.writeTo(new FileOutputStream("d:/test/"+System.currentTimeMillis()+".xlsx"));
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

导入一列数据

FileInputStream fileInputStream = FileUtils.openInputStream(new File("D:\test/1567833685699.xlsx"));
// 0 代表导入第 0 列数据,1 表示从第 1 行开始 
List<String> strings = ExcelImportUtil.importListData(fileInputStream, String.class, 0, 1);
 
  • 1
  • 2
  • 3

导入键值对数据

FileInputStream fileInputStream = FileUtils.openInputStream(new File("D:\test/1567833685699.xlsx"));
// 0 表示 key 的列为第 0 列;8 表示第 8 列为值列; 1 表示从第 1 行开始 
Map<String, String> stringStringMap = ExcelImportUtil.importMapData(fileInputStream, String.class, 0, 8, 1);
 
  • 1
  • 2
  • 3

导入实体对象数据

FileInputStream fileInputStream = FileUtils.openInputStream(new File("D:\test/1567833427823.xlsx"));
List<Simple> simples = ExcelImportUtil.importData(fileInputStream, Simple.class);
 
  • 1
  • 2

配置你的导入导出

注解 @ExcelExport 相关配置

// Excel 导出版本,可选值 ExcelVersion.EXCEL2007,ExcelVersion.EXCEL2003
ExcelVersion version() default ExcelVersion.EXCEL2007;

// 当导出有设置标题时,设置标题行的高度
short titleRowHeight() default 40;

// 头部行的高度,即列说明行的高度 
short headRowHeight() default 30;

// 每一行数据的高度
short bodyRowHeight() default 25;

// 是否自动宽度,Excel 的自动宽度对中文支持不好,我这里对中文宽度做了适应
boolean autoWidth() default true;

// 一个 sheet 页的最大数据量,设置 -1 表示不限制,2003 版本最大 60000 行;超过的行数会另起 sheet 页
int sheetMaxRow() default -1;

// 快速导出模式,使用  new SXSSFWorkbook(rowAccessWindowSize) workbook 对象 
boolean fastModel() default true;

// 快速导出模式的一个设置,一般默认就行
int rowAccessWindowSize() default 1000;
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

注解 @ExcelImport 相关配置

// 数据起始行,一般设置 1 就行,从 0 开始
int startRow();

// 支持导入的版本,默认都支持
ExcelVersion[] support() default {ExcelVersion.EXCEL2003,ExcelVersion.EXCEL2007};
 
  • 1
  • 2
  • 3
  • 4
  • 5

列注解 @ExcelColumn 相关配置

// 导出的中文头部列的值,导入不用管
String value();
// 导入的顺序,默认从 0 开始,导出不用管
int order() default -1;


// 宽度,Excel 宽度单元
int width() default -1;
// 使用字符数来定义宽度,一个中文算一个字符
int charWidth() default -1;
// 使用像素值来定义宽度
int pxWidth() default -1;
// 在使用自动宽度的时候,标记当前列是中文列
boolean chineseWidth() default false;

// 导出是否隐藏当前列
boolean hidden() default false;
// 导入的时候对当前列做字符串前后空格过滤 
boolean trim() default true;
// 导出的时候的单元格类型,可选值有CELL_TYPE_NUMERIC,CELL_TYPE_STRING,CELL_TYPE_BLANK,CELL_TYPE_BOOLEAN
CellType cellType() default CellType.CELL_TYPE_STRING;

// 导入、导出日期格式
String pattern() default "yyyy-MM-dd";
// 导入、导出的数字精度设置,会对浮点型做处理
int precision() default -1;
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
文章最后发布于: 2019-09-07 17:34:27

免责声明:文章转载自《Excel导入导出工具(简单、好用且轻量级的海量Excel文件导入导出解决方案.)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇WPF 杂记MySQL数据库增删改字段(属性)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

71款开源项目

71款开源项目 百度,一家让人既爱又恨的企业,血友吧贴吧被卖,魏则西事件的持续发酵,一时间将百度推到了舆论的风口浪尖上。是非对错,我们在这里也不多做评判,本文呢为大家整理了百度开源的70+项目,看看有没有感兴趣的。本文内容综合整理自oschina、github。 1. JavaScript图表库 ECharts ECharts开源来自百度商业前端数据可视化...

C#数据导出Excel详细介绍

概要: excel导出在C#代码中应用己经很广泛了,我这里就做些总结,供自己和读者学习用。 Excel知识点。一、添加引用和命名空间 添加Microsoft.Office.Interop.Excel引用,它的默认路径是C:\Program Files\Microsoft Visual Studio 9.0\Visual Studio Tools for O...

vcf格式文件转化为Excel(csv)格式文件(R语言的write.csv,write.table功能,Excel表的文件导入功能)

最近在整理文件,准备把vcf文件转化为Excel格式,或者CSV格式,网上搜了一堆资料,还真有人专门开发出转化格式的工具:叫vcf2csv(下载地址http://vcf2csv.sourceforge.net/#links),赶紧下载安装,开始转化,结果弹出行列不一致的错误,遂放弃。 尝试了一堆无用的工具以后,想着能不能用R的write.csv来实现转化,...

Excel中,从字符串中截取指定字符

情况一:提取字符串中的数字 目标:提取C列的全部数字 方法一:Excel中的FIND函数+MID函数   方法:想要从指定位置截取,用到MID函数。因为right和left函数都是从第一个字符或者最后一个字符开始截取,不适合。     MID语法:MID(字符串,截取开始位置,返回字符的个数)     因为截取的开始位置不统一,但是要截取的数字前面都有#...

laravel 导出插件

转发:https://blog.csdn.net/gu_wen_jie/article/details/79296470 版本:laravel5           php 5.6 安装步骤: 一、安装插件 ①、首先在Laravel项目根目录下使用Composer安装依赖: composer require "maatwebsite/excel:~2.1....

excel下划线转驼峰公式

最近为了省事,决定从excel将表结构生成jquery.datatable的json对象结构,其中要把下划线转驼峰,如下: =LEFT(C251,1)&MID(SUBSTITUTE(PROPER(C251),"_",""),2,100)...