我们在开发中经常要将数据导入成Excel表格供展示,也需要解析Excel中的数据,官方提供的api操作太麻烦,这边封装了一个Excel工具类,可以很轻松的实现Excel的操作
首先加入依赖
介绍如下
EasyPoi 是一个用于处理 Excel 文件的 Java 库,它提供了各种功能,包括读取和写入 Excel 文件,支持不同的 Excel 格式,以及用于生成 Excel 报表的工具;这些库依赖项用于在 Java 项目中引入 EasyPoi 的相关功能,以便于可以在应用程序中轻松地处理 Excel 文件;通过添加这些 依赖,可以在项目中使用 EasyPoi 提供的功能来操作 Excel 文件接下来实现工具类
public class ExcelUtils { /** * 根据数据生成excel表格,并将其写入HttpServletResponse。 * * @param name Excel文件名 * @param title 表格标题 * @param entityClass 数据对象的类 * @param list 数据列表 * @param httpServletResponse 用于响应的HttpServletResponse对象 */ public static void toExcelList(String name, String title, Class> entityClass, List> list, HttpServletResponse httpServletResponse) { // 创建导出参数对象 ExportParams exportParams = new ExportParams(); // 设置导出参数的工作表名称为传入的title exportParams.setSheetName(title); // 使用EasyPoi库来导出Excel,生成一个Workbook对象 Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entityClass, list); // 响应生成的Excel文件给客户端 responseExcel(name, httpServletResponse, workbook); } /** * 将生成的Excel表格保存到本地文件。 * * @param filepath 目标文件路径 * @param title Excel标题 * @param entityClass 数据对象的类 * @param list 数据列表 * @throws Exception 如果保存文件时发生异常 */ public static void fileExcel(String filepath, String title, Class> entityClass, List> list) throws Exception { // 创建导出参数对象 ExportParams params = new ExportParams(); // 设置Excel文件类型为XLSX params.setType(ExcelType.XSSF); // 设置工作表名称为传入的title params.setSheetName(title); try { // 使用EasyPoi库来导出Excel,生成一个Workbook对象 Workbook workbook = ExcelExportUtil.exportExcel(params, entityClass, list); // 将生成的Excel写入到文件 FileOutputStream fileOutputStream = new FileOutputStream(filepath); // 将Workbook对象写入到文件输出流中 workbook.write(fileOutputStream); } catch (Exception e) { // 抛出运行时异常 throw new Exception("Excel导出失败:"+ e.getMessage(), e); // 抛出异常并包含错误消息 } } /** * 解析Excel表格为List对象 * * @param multipartFile 文件上传对象 * @param clazz 返回值类型的Class对象 * @return 表格数据的List * @throws Exception 如果解析过程中发生异常 */ public static List> excelToList(MultipartFile multipartFile, Class> clazz) throws Exception { // 创建Excel导入参数对象 ImportParams params = new ImportParams(); // 设置Excel文件中标题所占的行数,setTitleRows(0)表示Excel文件中没有标题行 params.setTitleRows(0); // 设置Excel文件中表头(列名)所占的行数,setHeadRows(1)表示第一行包含了表头信息 params.setHeadRows(1); // 使用EasyExcel工具类导入Excel数据并返回List对象 return ExcelImportUtil.importExcel(multipartFile.getInputStream(), clazz, params); } /** * 将Excel表格写入响应体输出 * * @param name Excel文件名 * @param httpServletResponse 响应体对象 * @param workbook Excel工作簿对象 */ public static void responseExcel(String name, HttpServletResponse httpServletResponse, Workbook workbook) { try { // 对文件名进行URL编码,处理可能的特殊字符 name = URLEncoder.encode(name,"UTF-8"); // 设置响应的字符编码为UTF-8,以确保处理中文字符正确 httpServletResponse.setCharacterEncoding("UTF-8"); // 设置响应的Content-Type头,指定响应内容的类型为二进制流 httpServletResponse.setHeader("Content-Type","application/octet-stream"); // 设置Content-Disposition头,提示浏览器以附件形式下载文件,并指定下载的文件名 httpServletResponse.setHeader("Content-Disposition","attachment; filename="+ name); // 将Workbook对象的内容写入HttpServletResponse的输出流,实现文件下载 workbook.write(httpServletResponse.getOutputStream()); } catch (UnsupportedEncodingException e) { // 抛出运行时异常,处理不支持的字符编码异常 throw new RuntimeException(e); } catch (IOException e) { // 抛出运行时异常,处理文件输出异常 throw new RuntimeException(e); } } }这个工具类可以直接copy下来,这样就能简单的实现Excel的功能