Excel 操作是再常规不过的操作;对于过去各种办公软件App还不这么“横行”的时候,甚至是今天它都还是大多数人的办公必备;那么将Excel里面的数据同我们的编写的程序打通,把现在便捷的编程的能力应用到数据处理里面,成了很重要的一环。
ExcelKit可以实现简单的excel数据读取/写入操作,主要针对于poi进行封装,
简单的几个Api进行数据的操作,无需关心以往复杂的poi,关注excel数据不关心样式基本够用;如果更复杂的操作,建议直接使用poi 的api进行编程,不太适合在各种poi封装的第三方工具来回挣扎
List<String> sheetNames = ExcelKit.getSheetNames(new File("abx.xls"));
File file = new File("abx.xls");
String[] fields = {"name", "age"};
List<Map> list = ExcelKit.readExcel(file, fields); // [{name:"xx", "age": "12"}]
List<Map> list = ExcelKit.readExcel(file, fields, "Sheet1");
Map<String, List<Map>> listMap = ExcelKit.readExcelAll(file, fields); // {"Sheet1":[{"name":"xx", "age": "12"}]}
Workbook workBook = new SXSSFWorkbook();
通过文件对象
File file = new File("abx.xls");
Workbook workBook = ExcelKit.getWorkbook(file); //其实内部仅仅是通过一行代码调用poi 提供的方法返回
通过数据构建工作簿返回(具体见下面的将数据写入到excel
)
// 数据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")));
WorkBook woorBook = ExcelKit.getWorkBook(new File("abx.xls"));
Workbook wb = ExcelKit.exportExcel(list, heads);
实际使用中根据场景 使用上面的 获取excel 工作薄对象
然后做灵活的excel操作
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();
}
如果要转换: 可使用工具把 任意的 Map => JavaBean 的映射转换, 此工具有需要可以联系,目前还不太完善,后续放出
QQ群:237626260 个人QQ:237809796
个人博客地址:http://1216.top 码云/GitHub:https://gitee.com/tc608