ExcelKit 使用说明

分享 未结 置顶 精帖 0 0
绝尘
绝尘 2020-01-05

前言(废话):

Excel 操作是再常规不过的操作;对于过去各种办公软件App还不这么“横行”的时候,甚至是今天它都还是大多数人的办公必备;那么将Excel里面的数据同我们的编写的程序打通,把现在便捷的编程的能力应用到数据处理里面,成了很重要的一环。
ExcelKit可以实现简单的excel数据读取/写入操作,主要针对于poi进行封装,

本工具类的存在和意义:

简单的几个Api进行数据的操作,无需关心以往复杂的poi,关注excel数据不关心样式基本够用;如果更复杂的操作,建议直接使用poi 的api进行编程,不太适合在各种poi封装的第三方工具来回挣扎

功能概览

一、将excel中的数据读取出来

  1. 读取所有的sheet名
    List<String> sheetNames = ExcelKit.getSheetNames(new File("abx.xls"));
  1. 读取第一个sheet中的数据
    File file = new File("abx.xls");  
    String[] fields = {"name", "age"};  
    List<Map> list = ExcelKit.readExcel(file, fields); // [{name:"xx", "age": "12"}]
  1. 读取指定sheet名称中的数据
    List<Map> list = ExcelKit.readExcel(file, fields, "Sheet1");
  1. 读取所有sheet中的数据
    Map<String, List<Map>> listMap = ExcelKit.readExcelAll(file, fields); // {"Sheet1":[{"name":"xx", "age": "12"}]}
  1. 获取excel 工作薄对象
    通过poi 提供的api创建work对象
Workbook workBook = new SXSSFWorkbook();

通过文件对象

File file = new File("abx.xls");
Workbook workBook = ExcelKit.getWorkbook(file); //其实内部仅仅是通过一行代码调用poi 提供的方法返回

通过数据构建工作簿返回(具体见下面的将数据写入到excel

二、将数据写入到excel

  1. 写入List<T>数据
    // 数据List<T>  T可以是map,也可以是某个Javabean
    List list = asList(
            Map.of("name", "张三", "age", 12), //jdk9+语法,创建Map并初始化数据
            Map.of("name", "李四", "age", 11)
    );
    
    // 表头数据 k-v,k:map的数据key,v:表头展示的名称
    LinkedHashMap heads = new LinkedHashMap();
    heads.put("name", "姓名");
    heads.put("age", "年龄");
    
    
    // 将List<T> 数据写入到新创建的一个Excel工作薄对象中
    Workbook wb = ExcelKit.exportExcel(list, heads);
    // 存贮数据到文件中
    wb.write(new FileOutputStream(new File("target/abx.xls")));
  1. 将数据追加到已有的excel中
WorkBook woorBook = ExcelKit.getWorkBook(new File("abx.xls"));
Workbook wb = ExcelKit.exportExcel(list, heads);

实际使用中根据场景 使用上面的 获取excel 工作薄对象 然后做灵活的excel操作

三、其他

  1. 数据导出 的每个WorkBook ExcelKit.exportExcel(...); 返回内容都是一个标准的 poi 工作簿对象,并未提供导出到File 或者 浏览器下载;目的是考虑让ExcelKit只专门做excel相关的操作, 对于写文件–可能更适合交给文件FileKit, 对于下载–可能更适合交给一个类似renderKit(服务端返回客户端请求统一调度)的操作代码中, 做到代码的职责分工明确,以达到更佳的灵活性

浏览器下载例子:

    private static boolean downloadExcel(Workbook wb, String xlsName, HttpServletRequest request, HttpServletResponse response) throws IOException{
			if(request.getHeader("user-agent").indexOf("MSIE") != -1) {
				xlsName = java.net.URLEncoder.encode(xlsName,"utf-8") + ".xls";
			} else {
			    xlsName = new String(xlsName.getBytes("utf-8"),"iso-8859-1")+ ".xls";
			}
			OutputStream os = response.getOutputStream();
			response.setContentType("application/vnd.ms-excel");
			response.setHeader("Content-disposition", "attachment;filename="+xlsName);

			wb.write(os);
			return true;
	}

将工作薄对象写入到文件例子

        Workbook wb = ExcelKit.exportExcel(list, heads);

        try {
            wb.write(new FileOutputStream(new File("target/abx.xls"))); // 将工作簿对象写到磁盘文件
        } catch (IOException e) {
            e.printStackTrace();
        }
  1. 将List<Map> 数据映射到List<JavaBean> 和创建 工作簿对象一样,读取数据专注的是数据的解析、获取里面的数据, 至于得到数据后是否要映射给JavaBean 这只是一个可选项,甚至很多时候是没有必要的

如果要转换: 可使用工具把 任意的 Map => JavaBean 的映射转换, 此工具有需要可以联系,目前还不太完善,后续放出

QQ群:237626260   个人QQ:237809796

个人博客地址:http://1216.top 码云/GitHub:https://gitee.com/tc608
还有不明白?追问
  • 消灭零回复