|
|
|
@ -22,7 +22,7 @@ Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
# 最新版本 |
|
|
|
|
## VERSION : 1.1.1 |
|
|
|
|
### VERSION : 1.1.2-beat1 |
|
|
|
|
|
|
|
|
|
# 维护者 |
|
|
|
|
姬朋飞(玉霄) |
|
|
|
@ -31,60 +31,115 @@ Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都
|
|
|
|
|
|
|
|
|
|
## 读Excel |
|
|
|
|
|
|
|
|
|
测试代码地址:[https://github.com/alibaba/easyexcel/blob/master/src/test/java/com/alibaba/easyexcel/test/ReadTest.java](/src/test/java/com/alibaba/easyexcel/test/ReadTest.java) |
|
|
|
|
读07版小于1000行数据返回List<List<String>> |
|
|
|
|
``` |
|
|
|
|
public void noModelMultipleSheet() { |
|
|
|
|
InputStream inputStream = getInputStream("2007NoModelMultipleSheet.xlsx"); |
|
|
|
|
try { |
|
|
|
|
ExcelReader reader = new ExcelReader(inputStream, ExcelTypeEnum.XLSX, null, |
|
|
|
|
new AnalysisEventListener<List<String>>() { |
|
|
|
|
@Override |
|
|
|
|
public void invoke(List<String> object, AnalysisContext context) { |
|
|
|
|
System.out.println( |
|
|
|
|
"当前sheet:" + context.getCurrentSheet().getSheetNo() + " 当前行:" + context.getCurrentRowNum() |
|
|
|
|
+ " data:" + object); |
|
|
|
|
} |
|
|
|
|
@Override |
|
|
|
|
public void doAfterAllAnalysed(AnalysisContext context) { |
|
|
|
|
List<Object> data = EasyExcelFactory.read(inputStream, new Sheet(1, 0)); |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
``` |
|
|
|
|
读07版小于1000行数据返回List<? extend BaseRowModel> |
|
|
|
|
``` |
|
|
|
|
List<Object> data = EasyExcelFactory.read(inputStream, new Sheet(2, 1,JavaModel.class)); |
|
|
|
|
|
|
|
|
|
reader.read(); |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
e.printStackTrace(); |
|
|
|
|
``` |
|
|
|
|
读07版大于1000行数据返回List<List<String>> |
|
|
|
|
``` |
|
|
|
|
ExcelListener excelListener = new ExcelListener(); |
|
|
|
|
EasyExcelFactory.readBySax(inputStream, new Sheet(1, 1), excelListener); |
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
} finally { |
|
|
|
|
try { |
|
|
|
|
inputStream.close(); |
|
|
|
|
} catch (IOException e) { |
|
|
|
|
e.printStackTrace(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
读07版大于1000行数据返回List<? extend BaseRowModel> |
|
|
|
|
``` |
|
|
|
|
ExcelListener excelListener = new ExcelListener(); |
|
|
|
|
EasyExcelFactory.readBySax(inputStream, new Sheet(2, 1,JavaModel.class), excelListener); |
|
|
|
|
``` |
|
|
|
|
读03版方法同上 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 写Excel |
|
|
|
|
|
|
|
|
|
测试代码地址:[https://github.com/alibaba/easyexcel/blob/master/src/test/java/com/alibaba/easyexcel/test/WriteTest.java](/src/test/java/com/alibaba/easyexcel/test/WriteTest.java) |
|
|
|
|
|
|
|
|
|
没有模板 |
|
|
|
|
``` |
|
|
|
|
@Test |
|
|
|
|
public void test1() throws FileNotFoundException { |
|
|
|
|
OutputStream out = new FileOutputStream("/Users/jipengfei/78.xlsx"); |
|
|
|
|
try { |
|
|
|
|
ExcelWriter writer = new ExcelWriter(out, ExcelTypeEnum.XLSX); |
|
|
|
|
//写第一个sheet, sheet1 数据全是List<String> 无模型映射关系 |
|
|
|
|
Sheet sheet1 = new Sheet(1, 0,ExcelPropertyIndexModel.class); |
|
|
|
|
writer.write(getData(), sheet1); |
|
|
|
|
writer.finish(); |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
e.printStackTrace(); |
|
|
|
|
} finally { |
|
|
|
|
try { |
|
|
|
|
out.close(); |
|
|
|
|
} catch (IOException e) { |
|
|
|
|
e.printStackTrace(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
OutputStream out = new FileOutputStream("/Users/jipengfei/2007.xlsx"); |
|
|
|
|
ExcelWriter writer = EasyExcelFactory.getWriter(out); |
|
|
|
|
|
|
|
|
|
//写第一个sheet, sheet1 数据全是List<String> 无模型映射关系 |
|
|
|
|
Sheet sheet1 = new Sheet(1, 3); |
|
|
|
|
sheet1.setSheetName("第一个sheet"); |
|
|
|
|
//设置列宽 设置每列的宽度 |
|
|
|
|
Map columnWidth = new HashMap(); |
|
|
|
|
columnWidth.put(0,10000);columnWidth.put(1,40000);columnWidth.put(2,10000);columnWidth.put(3,10000); |
|
|
|
|
sheet1.setColumnWidthMap(columnWidth); |
|
|
|
|
sheet1.setHead(createTestListStringHead()); |
|
|
|
|
//or 设置自适应宽度 |
|
|
|
|
//sheet1.setAutoWidth(Boolean.TRUE); |
|
|
|
|
writer.write1(createTestListObject(), sheet1); |
|
|
|
|
|
|
|
|
|
//写第二个sheet sheet2 模型上打有表头的注解,合并单元格 |
|
|
|
|
Sheet sheet2 = new Sheet(2, 3, JavaModel1.class, "第二个sheet", null); |
|
|
|
|
sheet2.setTableStyle(createTableStyle()); |
|
|
|
|
writer.write(createTestListJavaMode(), sheet2); |
|
|
|
|
|
|
|
|
|
//写第三个sheet包含多个table情况 |
|
|
|
|
Sheet sheet3 = new Sheet(3, 0); |
|
|
|
|
sheet3.setSheetName("第三个sheet"); |
|
|
|
|
Table table1 = new Table(1); |
|
|
|
|
table1.setHead(createTestListStringHead()); |
|
|
|
|
writer.write1(createTestListObject(), sheet3, table1); |
|
|
|
|
|
|
|
|
|
//写sheet2 模型上打有表头的注解 |
|
|
|
|
Table table2 = new Table(2); |
|
|
|
|
table2.setTableStyle(createTableStyle()); |
|
|
|
|
table2.setClazz(JavaModel1.class); |
|
|
|
|
writer.write(createTestListJavaMode(), sheet3, table2); |
|
|
|
|
|
|
|
|
|
//关闭资源 |
|
|
|
|
writer.finish(); |
|
|
|
|
out.close(); |
|
|
|
|
``` |
|
|
|
|
有模板 |
|
|
|
|
``` |
|
|
|
|
InputStream inputStream = new BufferedInputStream(new FileInputStream("/Users/jipengfei/temp.xlsx")); |
|
|
|
|
OutputStream out = new FileOutputStream("/Users/jipengfei/2007.xlsx"); |
|
|
|
|
ExcelWriter writer = EasyExcelFactory.getWriterWithTemp(inputStream,out,ExcelTypeEnum.XLSX,true); |
|
|
|
|
|
|
|
|
|
//写第一个sheet, sheet1 数据全是List<String> 无模型映射关系 |
|
|
|
|
Sheet sheet1 = new Sheet(1, 3); |
|
|
|
|
sheet1.setSheetName("第一个sheet"); |
|
|
|
|
//设置列宽 设置每列的宽度 |
|
|
|
|
Map columnWidth = new HashMap(); |
|
|
|
|
columnWidth.put(0,10000);columnWidth.put(1,40000);columnWidth.put(2,10000);columnWidth.put(3,10000); |
|
|
|
|
sheet1.setColumnWidthMap(columnWidth); |
|
|
|
|
sheet1.setHead(createTestListStringHead()); |
|
|
|
|
//or 设置自适应宽度 |
|
|
|
|
//sheet1.setAutoWidth(Boolean.TRUE); |
|
|
|
|
writer.write1(createTestListObject(), sheet1); |
|
|
|
|
|
|
|
|
|
//写第二个sheet sheet2 模型上打有表头的注解,合并单元格 |
|
|
|
|
Sheet sheet2 = new Sheet(2, 3, JavaModel1.class, "第二个sheet", null); |
|
|
|
|
sheet2.setTableStyle(createTableStyle()); |
|
|
|
|
writer.write(createTestListJavaMode(), sheet2); |
|
|
|
|
|
|
|
|
|
//写第三个sheet包含多个table情况 |
|
|
|
|
Sheet sheet3 = new Sheet(3, 0); |
|
|
|
|
sheet3.setSheetName("第三个sheet"); |
|
|
|
|
Table table1 = new Table(1); |
|
|
|
|
table1.setHead(createTestListStringHead()); |
|
|
|
|
writer.write1(createTestListObject(), sheet3, table1); |
|
|
|
|
|
|
|
|
|
//写sheet2 模型上打有表头的注解 |
|
|
|
|
Table table2 = new Table(2); |
|
|
|
|
table2.setTableStyle(createTableStyle()); |
|
|
|
|
table2.setClazz(JavaModel1.class); |
|
|
|
|
writer.write(createTestListJavaMode(), sheet3, table2); |
|
|
|
|
|
|
|
|
|
//关闭资源 |
|
|
|
|
writer.finish(); |
|
|
|
|
out.close(); |
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
# web下载实例写法 |
|
|
|
|
package com.alibaba.china.pte.web.seller.dingtalk.rpc; |
|
|
|
|
|
|
|
|
|