-
Notifications
You must be signed in to change notification settings - Fork 325
Excel Csv导入
清沐 edited this page Jan 26, 2022
·
20 revisions
导入分为一般导入、sax导入,二者的区别在于sax导入更关注内存,内存使用更少,且sax方式导入功能增强,建议使用sax方式导入(可读取公式值)。
URL htmlToExcelEampleURL = this.getClass().getResource("/templates/read_example.xlsx");
Path path = Paths.get(htmlToExcelEampleURL.toURI());
// 方式一:全部读取后处理
List<ArtCrowd> result = DefaultExcelReader.of(ArtCrowd.class)
.sheet(0) // 0代表第一个,如果为0,可省略该操作,也可sheet("名称")读取
.rowFilter(row -> row.getRowNum() > 0) // 如无需过滤,可省略该操作,0代表第一行
.beanFilter(ArtCrowd::isDance) // bean过滤
.startSheet(sheet->System.out.println(sheet.getName())) // 在开始读取sheet前执行指定操作
.read(path.toFile());// 可接收inputStream
// 方式二:读取一行处理一行,可自行决定终止条件
// readThen有两种重写接口,返回Boolean型接口允许在返回False情况下直接终止读取
DefaultExcelReader.of(ArtCrowd.class)
.sheet(0) // 0代表第一个,如果为0,可省略该操作,也可sheet("名称")读取
.rowFilter(row -> row.getRowNum() > 0) // 如无需过滤,可省略该操作,0代表第一行
.beanFilter(ArtCrowd::isDance) // bean过滤
.readThen(path.toFile() ,artCrowd -> {System.out.println(artCrowd.getName);});// 可接收inputStream
public class ArtCrowd {
// index代表列索引,从0开始
@ExcelColumn(index = 0)
private String name;
@ExcelColumn(index = 1)
private String age;
@ExcelColumn(index = 2,format="yyyy-MM-dd")
private Date birthday;
}
csv文件导入接口与导入excel接口一致,仅传入文件不同,程序会自动区分,建议使用File方式导入
如需导入为Map,请将导入类设置为
SaxExcelReader.of(Map.class)
,结果为List<Map>
,Map实际类型为LinkedHashMap,key值为Cell,value值为String类型内容值
支持无注解导入,即无需
@ExcelColumn
指定字段对应的列,会按照全字段默认顺序进行导入
如需提前获取工作簿信息,如有哪些sheet,某个sheet有多少行等,请使用
SaxExcelReader.getWorkbookMetaData(file)
获取元信息
URL htmlToExcelEampleURL = this.getClass().getResource("/templates/read_example.xlsx");
Path path = Paths.get(htmlToExcelEampleURL.toURI());
// 方式一:全部读取后处理,SAX模式,避免OOM,建议大量数据使用
List<ArtCrowd> result = SaxExcelReader.of(ArtCrowd.class)
.sheet(0) // 0代表第一个,如果为0,可省略该操作,也可sheet("名称")读取,.csv文件无效
.rowFilter(row -> row.getRowNum() > 0) // 如无需过滤,可省略该操作,0代表第一行
.csvCharset("GBK") // 仅.csv文件有效,设置当前文件的编码,可选,默认为UTF-8
.csvDelimiter(';') // 仅.csv文件有效,设置当前文件分割符,可选,默认为英文逗号-,
.ignoreBlankRow() // 是否忽略空行,可选,默认不忽略
.stopReadingOnBlankRow() // 是否遇到空行则停止读取,可选,默认为否
.detectedMerge() // 识别合并单元格,默认不识别
.beanFilter(ArtCrowd::isDance) // 可选,bean过滤
.read(path.toFile());// 可接收inputStream
// 方式二:读取一行处理一行,可自行决定终止条件,SAX模式,避免OOM,建议大量数据使用
// readThen有两种重写接口,返回Boolean型接口允许在返回False情况下直接终止读取
SaxExcelReader.of(ArtCrowd.class)
.sheet(0) // 0代表第一个,如果为0,可省略该操作,也可sheet("名称")读取,.csv文件无效
.rowFilter(row -> row.getRowNum() > 0) // 如无需过滤,可省略该操作,0代表第一行
.csvCharset("GBK") // 仅.csv文件有效,设置当前文件的编码,可选,默认为UTF-8
.csvDelimiter(';') // 仅.csv文件有效,设置当前文件分割符,可选,默认为英文逗号-,
.ignoreBlankRow() // 是否忽略空行,可选,默认不忽略
.stopReadingOnBlankRow() // 是否遇到空行则停止读取,可选,默认为否
.detectedMerge() // 识别合并单元格,默认不识别
.beanFilter(ArtCrowd::isDance) // 可选,bean过滤
.readThen(path.toFile() ,artCrowd -> {System.out.println(artCrowd.getName);});// 可接收inputStream
public class ArtCrowd {
// index代表列索引,从0开始
@ExcelColumn(index = 0)
private String name;
@ExcelColumn(index = 1)
private String age;
@ExcelColumn(index = 2,format="yyyy-MM-dd")
private Date birthday;
}
可不使用@ExcelColumn注解,如不使用,则使用字段默认顺序读取
导入必须
使用注解: @ExcelColumn(index) 按列索引读取 或者 @ExcelColumn(title) 按title读取
对应注解详情请见:注解
操作API请参见 API
-
Overview
概述 -
FAQ
常见问题 -
Dependency adding
依赖添加 -
Excel/Csv import
Excel/Csv导入 - 一对多导入
-
Excel default export
默认导出 -
Excel streaming export
流式导出 -
Dynamic export
动态导出 -
Excel template build
模板构建 -
CSV export
csv导出 -
Multiple sheet import
多sheet导入 -
Multiple sheet export
多sheet导出 - 聚合列&聚合导出
-
Custom style
自定义样式 -
Multilevel header
多级表头 -
Wrap within cell
单元格内换行 -
Image export
图片导出 -
Image import
图片导入 -
Hyperlink
链接 - 读取链接
-
Template row height setting
模板行高度设置 -
Drop-down-list
下拉列表 -
Custom convert
写入自定义转化 -
Formula usage
公式使用 -
Template cell setting
单元格设置 -
Header freeze
区域冻结 - 提示
-
Style support
样式支持 - 添加水印
- 按列读取
- 单元格斜线绘制
- 设置批注
- 版本日志