public class ExcelUtils { private static final Logger logger = LoggerFactory.getLogger(ExcelUtils.class); private static List<List<Object>> lineList = new ArrayList<>(); /** * excel 导出工具类 * * @param response * @param fileName 文件名 * @param projects 对象集合 * @param columnNames 导出的excel中的列名 * @param keys 对应的是对象中的字段名字 * @throws IOException */ public static void export(HttpServletResponse response, String fileName, List<?> projects, String[] columnNames, String[] keys) throws IOException { ExcelWriter bigWriter = ExcelUtil.getBigWriter(); for (int i = 0; i < columnNames.length; i++) { bigWriter.addHeaderAlias(columnNames[i], keys[i]); bigWriter.setColumnWidth(i, 20); } // 一次性写出内容,使用默认样式,强制输出标题 bigWriter.write(projects, true); //response为HttpServletResponse对象 response.setContentType("application/vnd.ms-excel;charset=utf-8"); //test.xls是弹出下载对话框的文件名,不能为中文,中文请自行编码 response.setHeader("Content-Disposition", "attachment;filename=" + new String((fileName + ".xlsx").getBytes(), "iso-8859-1")); ServletOutputStream out = response.getOutputStream(); bigWriter.flush(out, true); // 关闭writer,释放内存 bigWriter.close(); //此处记得关闭输出Servlet流 IoUtil.close(out); } /** * excel导入工具类 * * @param file 文件 * @param columNames 列对应的字段名 * @return 返回数据集合 * @throws OperationException * @throws IOException */ public static List<Map<String, Object>> leading(MultipartFile file, String[] columNames) throws OperationException, IOException { String fileName = file.getOriginalFilename(); // 上传文件为空 if (StringUtils.isEmpty(fileName)) { throw new OperationException(ReturnCodeEnum.OPERATION_EXCEL_ERROR, "没有导入文件"); } //上传文件大小为1000条数据 if (file.getSize() > 1024 * 1024 * 10) { logger.error("upload | 上传失败: 文件大小超过10M,文件大小为:{}", file.getSize()); throw new OperationException(ReturnCodeEnum.OPERATION_EXCEL_ERROR, "上传失败: 文件大小不能超过10M!"); } // 上传文件名格式不正确 if (fileName.lastIndexOf(".") != -1 && !".xlsx".equals(fileName.substring(fileName.lastIndexOf(".")))) { throw new OperationException(ReturnCodeEnum.OPERATION_EXCEL_ERROR, "文件名格式不正确, 请使用后缀名为.XLSX的文件"); } //读取数据 ExcelUtil.read07BySax(file.getInputStream(), 0, createRowHandler()); //去除excel中的第一行数据 lineList.remove(0); //将数据封装到list<Map>中 List<Map<String, Object>> dataList = new ArrayList<>(); for (int i = 0; i < lineList.size(); i++) { if (null != lineList.get(i)) { Map<String, Object> hashMap = new HashMap<>(); for (int j = 0; j < columNames.length; j++) { Object property = lineList.get(i).get(j); hashMap.put(columNames[j], property); } dataList.add(hashMap); } else { break; } } return dataList; } /** * 通过实现handle方法编写我们要对每行数据的操作方式 */ private static RowHandler createRowHandler() { //清空一下集合中的数据 lineList.removeAll(lineList); return new RowHandler() { @Override public void handle(int sheetIndex, int rowIndex, List rowlist) { //将读取到的每一行数据放入到list集合中 JSONArray jsonObject = new JSONArray(rowlist); lineList.add(jsonObject.toList(Object.class)); } }; } }
使用hutool工具类进行简单的excel导入和导出的工具类
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
上一篇:如何将vscode设置为中文
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
java 秒转小时工具类 hutool
java 秒转小时工具类 hutool
日期时间 Java System -
超级简单导出Excel 工具,Hutool Java工具类库
Hutool Java工具类库
封装 java xml redis apache -
简单的excel工具类
实用的excel工具类
职场 excel 休闲 工具类 -
导出Excel工具类
1.依赖包 2.工具代码
导出Excel apache java 置顶 其他 -
JAVA工具类(3) ---使用excel工具类导出对象
package com.gcloud.common;import org.apache.poi.ss.usermodel.Cell;import org.apache.poi
java excel poi解析word excel导入导出 List -
Java工具类Hutool使用
首先确定我们要对那些表进行数据的导入导出,这里的建议是对数据更改不频繁的表进行数据的导入导出,而且对于
java 数据库 服务器 工具类 字符串