项目作者: Sky154

项目描述 :
用于导入导出Excel的Util包,基于Java的POI。可将List导出成Excel,或读取Excel成List,读取时有验证和Log,支持Excel模版导出,以及导入导出Bean字段选择是否忽略
高级语言: Java
项目地址: git://github.com/Sky154/ExcelUtil.git
创建时间: 2020-04-24T10:05:07Z
项目社区:https://github.com/Sky154/ExcelUtil

开源协议:Apache License 2.0

下载


ExcelUtil

用于导入导出Excel的Util包,基于Java的POI。可将List导出成Excel,或读取Excel成List,读取时有验证和Log,
支持Excel模版导出,以及导入导出Bean字段可选择是否忽略

本ExcelUtil是基于SargerasWang/ExcelUtil项目进行的二次版本开发升级使其
支持Excel模版导出,以及导入导出Bean字段可选择是否忽略


使用方法

ExcelCell注解说明

  • index 顺序(不是指在Excel中的第几列)
  • ignore 字段在导入导出时忽略,默认为false
  • ignoreImport 字段在导入时忽略,默认为false
  • ignoreExport 字段在导出时忽略,默认为false
  • defaultValue 当值为null时要显示的值 default StringUtils.EMPTY

Valid注解说明
用户单元格校验

  • in 必须与in中String相符,目前仅支持String类型 e.g. {“key”,”value”}
  • allowNull 是否允许为空,用于验证数据 默认值 true
  • gt 大于
  • lt 小于
  • ge 大于等于
  • le 小于等于

    数据模型
    通常可以使用你的数据表bean,当然如果需要导入/导出的字段与数据表差异很大,可以新增bean,当然也可以跳过bean,直接使用Map,下面是示例Bean:
    ```Java

public class Model {
@ExcelCell(index = 0)
private String a;
@ExcelCell(index = 1, ignoreExport = true)
private String b;
@ExcelCell(index = 2, ignoreImport = true)
private String c;
@ExcelCell(index = 4, ignore = true)
private Date d;

  1. public Date getD() {
  2. return d;
  3. }
  4. public void setD(Date d) {
  5. this.d = d;
  6. }
  7. public Model() {
  8. }
  9. //setter and getter 省略...
  1. **导出-Bean方式**
  2. ```Java
  3. public void exportXls() throws IOException {
  4. //用排序的Map且Map的键应与ExcelCell注解的index对应
  5. Map<String,String> map = new LinkedHashMap<>();
  6. map.put("a","姓名");
  7. map.put("b","年龄");
  8. map.put("c","性别");
  9. map.put("d","出生日期");
  10. Collection<Object> dataset=new ArrayList<Object>();
  11. dataset.add(new Model("", "", "",null));
  12. dataset.add(new Model(null, null, null,null));
  13. dataset.add(new Model("李四", "24", "女",new Date()));
  14. dataset.add(new Model("王五", "34", "男",new Date()));
  15. File f=new File("test.xlsx");
  16. OutputStream out =new FileOutputStream(f);
  17. ExcelUtil.exportExcel(map, dataset, out, ExcelType.XLXS);
  18. out.close();
  19. }

导出-Map方式

  1. public void exportXls() throws IOException {
  2. List<Map<String,Object>> list = new ArrayList<>();
  3. Map<String,Object> map =new LinkedHashMap<>();
  4. map.put("name", "");
  5. map.put("age", "");
  6. map.put("birthday","");
  7. map.put("sex","");
  8. Map<String,Object> map2 =new LinkedHashMap<String, Object>();
  9. map2.put("name", "测试是否是中文长度不能自动宽度.测试是否是中文长度不能自动宽度.");
  10. map2.put("age", null);
  11. map2.put("sex", null);
  12. map.put("birthday",null);
  13. Map<String,Object> map3 =new LinkedHashMap<String, Object>();
  14. map3.put("name", "张三");
  15. map3.put("age", 12);
  16. map3.put("sex", "男");
  17. map3.put("birthday",new Date());
  18. list.add(map);
  19. list.add(map2);
  20. list.add(map3);
  21. Map<String,String> map1 = new LinkedHashMap<>();
  22. map1.put("name","姓名");
  23. map1.put("age","年龄");
  24. map1.put("birthday","出生日期");
  25. map1.put("sex","性别");
  26. File f= new File("test.xls");
  27. OutputStream out = new FileOutputStream(f);
  28. ExcelUtil.exportExcel(map1,list, out, ExcelType.XLX );
  29. out.close();
  30. }

导入
ExcelUtil.importExcel 方法的第一个参数,是个Class,如果你有Bean,就写Bean的Class,反之,直接Map.class
XLS 文件

  1. public void importXls() throws FileNotFoundException {
  2. File f=new File("src/test/resources/test.xls");
  3. InputStream inputStream= new FileInputStream(f);
  4. ExcelLogs logs =new ExcelLogs();
  5. Collection<Model> importExcel = ExcelUtil.importExcel(Model.class, inputStream, "yyyy/MM/dd", logs , 0);
  6. for(Model m : importExcel){
  7. System.out.println(m.getA() + " " + m.getB()+ " "
  8. +m.getC() + " " + m.getD());
  9. }

XLSX 文件

  1. public void importXlsx() throws FileNotFoundException {
  2. File f=new File("src/test/resources/test.xlsx");
  3. InputStream inputStream= new FileInputStream(f);
  4. ExcelLogs logs =new ExcelLogs();
  5. Collection<Map> importExcel = ExcelUtil.importExcel(Map.class, inputStream, "yyyy/MM/dd HH:mm:ss", logs , 0);
  6. for(Map m : importExcel){
  7. System.out.println(m);
  8. }
  9. }

Execl 模版导出
代码

  1. public void exportTemplate() throws Exception {
  2. Collection<Object> dataset=new ArrayList<Object>();
  3. dataset.add(new Model("张三", 44, "男",new Date()));
  4. dataset.add(new Model("李四", 24, "女",new Date()));
  5. dataset.add(new Model("王五", 34, "男",new Date()));
  6. dataset.add(new Model("陆六", 23, "女",new Date()));
  7. File tempfile =new File("src/test/resources/testTemplate.xlsx");
  8. InputStream is= new FileInputStream(tempfile);
  9. File outfile= new File("testByTemp.xlsx");
  10. OutputStream out = new FileOutputStream(outfile);
  11. Map<String,Object> map = new HashMap<String,Object>();
  12. map.put("model", dataset);
  13. ExcelUtil.exportExcelByTemplate(is,map,out);
  14. }

Excel模版
Excel导出模版
导出结果
Excel模版导出结果