Fetch the repository succeeded.
This action will force synchronization from Crab2Died/Excel4J, which will overwrite any changes that you have made since you forked the repository, and can not be recovered!!!
Synchronous operation will process in the background and will refresh the page when finishing processing. Please be patient.
___________ .__ _____ ____.
\_ _____/__ ___ ____ ____ | | / | | | |
| __)_\ \/ // ___\/ __ \| | / | |_ | |
| \> <\ \__\ ___/| |__/ ^ /\__| |
/_______ /__/\_ \\___ >___ >____/\____ |\________|
\/ \/ \/ \/ |__|
(version: 3.0.0-Alpha)
紧急修复以绝对路径指定模板来导出会导致模板被修改的BUG,以及读取Excel数据会修改原Excel文件,建议升级至2.1.4-Final2及以上版本
List<List<String>>
对象内List<List<String>>
导出Excel了(可以不基于模板)com.github.converter.ReadConvertible
com.github.converter.WriteConvertible
com.github.sheet.wrapper
包内包装类 @ExcelField(title = "学号", order = 1)
private Long id;
@ExcelField(title = "姓名", order = 2)
private String name;
// 写入数据转换器 Student2DateConverter
@ExcelField(title = "入学日期", order = 3, writeConverter = Student2DateConverter.class)
private Date date;
@ExcelField(title = "班级", order = 4)
private Integer classes;
// 读取数据转换器 Student2ExpelConverter
@ExcelField(title = "是否开除", order = 5, readConverter = Student2ExpelConverter.class)
private boolean expel;
/**
* excel是否开除 列数据转换器
*/
public class Student2ExpelConverter implements ReadConvertible{
@Override
public Object execRead(String object) {
return object.equals("是");
}
}
@Test
public void excel2Object2() {
String path = "D:\\JProject\\Excel4J\\src\\test\\resources\\students_02.xlsx";
try {
// 1)
// 不基于注解,将Excel内容读至List<List<String>>对象内
List<List<String>> lists = ExcelUtils.getInstance().readExcel2List(path, 1, 2, 0);
System.out.println("读取Excel至String数组:");
for (List<String> list : lists) {
System.out.println(list);
}
// 2)
// 基于注解,将Excel内容读至List<Student2>对象内
// 验证读取转换函数Student2ExpelConverter
// 注解 `@ExcelField(title = "是否开除", order = 5, readConverter = Student2ExpelConverter.class)`
List<Student2> students = ExcelUtils.getInstance().readExcel2Objects(path, Student2.class, 0, 0);
System.out.println("读取Excel至对象数组(支持类型转换):");
for (Student2 st : students) {
System.out.println(st);
}
} catch (Exception e) {
e.printStackTrace();
}
}
读取Excel至String数组:
[10000000000001, 张三, 2016/01/19, 101, 是]
[10000000000002, 李四, 2017-11-17 10:19:10, 201, 否]
读取Excel至对象数组(支持类型转换):
Student2{id=10000000000001, name='张三', date=Tue Jan 19 00:00:00 CST 2016, classes=101, expel='true'}
Student2{id=10000000000002, name='李四', date=Fri Nov 17 10:19:10 CST 2017, classes=201, expel='false'}
Student2{id=10000000000004, name='王二', date=Fri Nov 17 00:00:00 CST 2017, classes=301, expel='false'}
@Test
public void testList2Excel() throws Exception {
List<List<String>> list2 = new ArrayList<>();
List<String> header = new ArrayList<>();
for (int i = 0; i < 10; i++) {
List<String> _list = new ArrayList<>();
for (int j = 0; j < 10; j++) {
_list.add(i + " -- " + j);
}
list2.add(_list);
header.add(i + "---");
}
ExcelUtils.getInstance().exportObjects2Excel(list2, header, "D:/D.xlsx");
}
/**
* 导出excel日期数据转换器
*/
public class Student2DateConverter implements WriteConvertible {
@Override
public Object execWrite(Object object) {
Date date = (Date) object;
return DateUtils.date2Str(date, DateUtils.DATE_FORMAT_MSEC_T_Z);
}
}
// 验证日期转换函数 Student2DateConverter
// 注解 `@ExcelField(title = "入学日期", order = 3, writeConverter = Student2DateConverter.class)`
@Test
public void testWriteConverter() throws Exception {
List<Student2> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
list.add(new Student2(10000L + i, "学生" + i, new Date(), 201, false));
}
ExcelUtils.getInstance().exportObjects2Excel(list, Student2.class, true, "sheet0", true, "D:/D.xlsx");
}
List<Oject>
导出 @Test
public void testObject2Excel() throws Exception {
String tempPath = "/normal_template.xlsx";
List<Student1> list = new ArrayList<>();
list.add(new Student1("1010001", "盖伦", "六年级三班"));
list.add(new Student1("1010002", "古尔丹", "一年级三班"));
list.add(new Student1("1010003", "蒙多(被开除了)", "六年级一班"));
list.add(new Student1("1010004", "萝卜特", "三年级二班"));
list.add(new Student1("1010005", "奥拉基", "三年级二班"));
list.add(new Student1("1010006", "得嘞", "四年级二班"));
list.add(new Student1("1010007", "瓜娃子", "五年级一班"));
list.add(new Student1("1010008", "战三", "二年级一班"));
list.add(new Student1("1010009", "李四", "一年级一班"));
Map<String, String> data = new HashMap<>();
data.put("title", "战争学院花名册");
data.put("info", "学校统一花名册");
// 基于模板导出Excel
ExcelUtils.getInstance().exportObjects2Excel(tempPath, 0, list, data, Student1.class, false, "D:/A.xlsx");
// 不基于模板导出Excel
ExcelUtils.getInstance().exportObjects2Excel(list, Student1.class, true, null, true, "D:/B.xlsx");
}
Map<String, Collection<Object.toString>>
导出 @Test
public void testMap2Excel() throws Exception {
Map<String, List> classes = new HashMap<>();
Map<String, String> data = new HashMap<>();
data.put("title", "战争学院花名册");
data.put("info", "学校统一花名册");
classes.put("class_one", new ArrayList<Student1>() {{
add(new Student1("1010009", "李四", "一年级一班"));
add(new Student1("1010002", "古尔丹", "一年级三班"));
}});
classes.put("class_two", new ArrayList<Student1>() {{
add(new Student1("1010008", "战三", "二年级一班"));
}});
classes.put("class_three", new ArrayList<Student1>() {{
add(new Student1("1010004", "萝卜特", "三年级二班"));
add(new Student1("1010005", "奥拉基", "三年级二班"));
}});
classes.put("class_four", new ArrayList<Student1>() {{
add(new Student1("1010006", "得嘞", "四年级二班"));
}});
classes.put("class_six", new ArrayList<Student1>() {{
add(new Student1("1010001", "盖伦", "六年级三班"));
add(new Student1("1010003", "蒙多", "六年级一班"));
}});
ExcelUtils.getInstance().exportObject2Excel("/map_template.xlsx",
0, classes, data, Student1.class, false, "D:/C.xlsx");
}
定义符 | 描述 | 优先级(大到小) |
---|---|---|
$appoint_line_style | 当前行样式 | 3 |
$single_line_style | 奇数行样式 | 2 |
$double_line_style | 偶数行样式 | 2 |
$default_style | 默认样式 | 1 |
$data_index | 数据插入的起始位置 | - |
$serial_number | 插入序号标记 | - |
com.github.sheet.wrapper
包内包装类多sheet数据导出只需将待导出数据封装入com.github.sheet.wrapper
包内的Wrapper类即可实现多sheet一键导出
com.github.sheet.wrapper.SimpleSheetWrapper
// 多sheet无模板、无注解导出
@Test
public void testBatchSimple2Excel() throws Exception {
// 生成sheet数据
List<SimpleSheetWrapper> list = new ArrayList<>();
for (int i = 0; i <= 2; i++) {
//表格内容数据
List<String[]> data = new ArrayList<>();
for (int j = 0; j < 1000; j++) {
// 行数据(此处是数组) 也可以是List数据
String[] rows = new String[5];
for (int r = 0; r < 5; r++) {
rows[r] = "sheet_" + i + "row_" + j + "column_" + r;
}
data.add(rows);
}
// 表头数据
List<String> header = new ArrayList<>();
for (int h = 0; h < 5; h++) {
header.add("column_" + h);
}
list.add(new SimpleSheetWrapper(data, header, "sheet_" + i));
}
ExcelUtils.getInstance().simpleSheet2Excel(list, "K.xlsx");
}
com.github.sheet.wrapper.NoTemplateSheetWrapper
// 多sheet无模板、基于注解的导出
@Test
public void testBatchNoTemplate2Excel() throws Exception {
List<NoTemplateSheetWrapper> sheets = new ArrayList<>();
for (int s = 0; s < 3; s++) {
List<Student2> list = new ArrayList<>();
for (int i = 0; i < 1000; i++) {
list.add(new Student2(10000L + i, "学生" + i, new Date(), 201, false));
}
sheets.add(new NoTemplateSheetWrapper(list, Student2.class, true, "sheet_" + s));
}
ExcelUtils.getInstance().noTemplateSheet2Excel(sheets, "EE.xlsx");
}
com.github.sheet.wrapper.NormalSheetWrapper
// 基于模板、注解的多sheet导出
@Test
public void testObject2BatchSheet() throws Exception {
List<NormalSheetWrapper> sheets = new ArrayList<>();
for (int i = 0; i < 2; i++) {
List<Student1> list = new ArrayList<>();
list.add(new Student1("1010001", "盖伦", "六年级三班"));
list.add(new Student1("1010002", "古尔丹", "一年级三班"));
list.add(new Student1("1010003", "蒙多(被开除了)", "六年级一班"));
list.add(new Student1("1010004", "萝卜特", "三年级二班"));
list.add(new Student1("1010005", "奥拉基", "三年级二班"));
list.add(new Student1("1010006", "得嘞", "四年级二班"));
list.add(new Student1("1010007", "瓜娃子", "五年级一班"));
list.add(new Student1("1010008", "战三", "二年级一班"));
list.add(new Student1("1010009", "李四", "一年级一班"));
Map<String, String> data = new HashMap<>();
data.put("title", "战争学院花名册");
data.put("info", "学校统一花名册");
sheets.add(new NormalSheetWrapper(i, list, data, Student1.class, false));
}
String tempPath = "/normal_batch_sheet_template.xlsx";
// 基于模板导出Excel
ExcelUtils.getInstance().normalSheet2Excel(sheets, tempPath, "AA.xlsx");
}
Map<String, Collection<Object.toString>>
数据基于模板、注解的多sheet导出com.github.sheet.wrapper.MapSheetWrapper
// Map数据的多sheet导出
@Test
public void testMap2BatchSheet() throws Exception {
List<MapSheetWrapper> sheets = new ArrayList<>();
for (int i = 0; i < 2; i++) {
Map<String, List<?>> classes = new HashMap<>();
Map<String, String> data = new HashMap<>();
data.put("title", "战争学院花名册");
data.put("info", "学校统一花名册");
classes.put("class_one", Arrays.asList(
new Student1("1010009", "李四", "一年级一班"),
new Student1("1010002", "古尔丹", "一年级三班")
));
classes.put("class_two", Collections.singletonList(
new Student1("1010008", "战三", "二年级一班")
));
classes.put("class_three", Arrays.asList(
new Student1("1010004", "萝卜特", "三年级二班"),
new Student1("1010005", "奥拉基", "三年级二班")
));
classes.put("class_four", Collections.singletonList(
new Student1("1010006", "得嘞", "四年级二班")
));
classes.put("class_six", Arrays.asList(
new Student1("1010001", "盖伦", "六年级三班"),
new Student1("1010003", "蒙多", "六年级一班")
));
sheets.add(new MapSheetWrapper(i, classes, data, Student1.class, false));
}
ExcelUtils.getInstance().mapSheet2Excel(sheets, "/map_batch_sheet_template.xlsx", "CC.xlsx");
}
// 测试读取CSV文件
@Test
public void testReadCSV() throws Excel4JException {
List<Student2> list = ExcelUtils.getInstance().readCSV2Objects("J.csv", Student2.class);
System.out.println(list);
}
Student2{id=1000001, name='张三', date=Wed Nov 28 15:11:12 CST 2018, classes=1, expel='false'}
Student2{id=1010002, name='古尔丹', date=Wed Nov 28 15:11:12 CST 2018, classes=2, expel='false'}
Student2{id=1010003, name='蒙多(被开除了)', date=Wed Nov 28 15:11:12 CST 2018, classes=6, expel='false'}
Student2{id=1010004, name='萝卜特', date=Wed Nov 28 15:11:12 CST 2018, classes=3, expel='false'}
Student2{id=1010005, name='奥拉基', date=Wed Nov 28 15:11:12 CST 2018, classes=4, expel='false'}
Student2{id=1010006, name='得嘞', date=Wed Nov 28 15:11:12 CST 2018, classes=4, expel='false'}
Student2{id=1010007, name='瓜娃子', date=Wed Nov 28 15:11:12 CST 2018, classes=5, expel='false'}
Student2{id=1010008, name='战三', date=Wed Nov 28 15:11:12 CST 2018, classes=4, expel='false'}
Student2{id=1010009, name='李四', date=Wed Nov 28 15:11:12 CST 2018, classes=2, expel='false'}
// 导出csv
@Test
public void testExport2CSV() throws Excel4JException {
List<Student2> list = new ArrayList<>();
list.add(new Student2(1000001L, "张三", new Date(), 1, true));
list.add(new Student2(1010002L, "古尔丹", new Date(), 2, false));
list.add(new Student2(1010003L, "蒙多(被开除了)", new Date(), 6, true));
list.add(new Student2(1010004L, "萝卜特", new Date(), 3, false));
list.add(new Student2(1010005L, "奥拉基", new Date(), 4, false));
list.add(new Student2(1010006L, "得嘞", new Date(), 4, false));
list.add(new Student2(1010007L, "瓜娃子", new Date(), 5, true));
list.add(new Student2(1010008L, "战三", new Date(), 4, false));
list.add(new Student2(1010009L, "李四", new Date(), 2, false));
ExcelUtils.getInstance().exportObjects2CSV(list, Student2.class, "J.csv");
}
// 超大数据量导出csv
// 9999999数据本地测试小于1min
@Test
public void testExport2CSV2() throws Excel4JException {
List<Student2> list = new ArrayList<>();
for (int i = 0; i < 9999999; i++) {
list.add(new Student2(1000001L + i, "路人 -" + i, new Date(), i % 6, true));
}
ExcelUtils.getInstance().exportObjects2CSV(list, Student2.class, "L.csv");
}
// 以下为导出CSV文件内容
学号,姓名,入学日期,班级,是否开除
1000001,张三,2018-11-28T15:11:12.815Z,1,true
1010002,古尔丹,2018-11-28T15:11:12.815Z,2,false
1010003,蒙多(被开除了),2018-11-28T15:11:12.815Z,6,true
1010004,萝卜特,2018-11-28T15:11:12.815Z,3,false
1010005,奥拉基,2018-11-28T15:11:12.815Z,4,false
1010006,得嘞,2018-11-28T15:11:12.815Z,4,false
1010007,瓜娃子,2018-11-28T15:11:12.815Z,5,true
1010008,战三,2018-11-28T15:11:12.815Z,4,false
1010009,李四,2018-11-28T15:11:12.815Z,2,false
>> git clone https://github.com/Crab2died/Excel4J.git Excel4J
>> package.cmd
<dependency>
<groupId>com.github.crab2died</groupId>
<artifactId>Excel4J</artifactId>
<version>3.0.0-Alpha</version>
</dependency>
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。