生小孩去什么网站做登记,池州哪家做网站,广州专业的免费建站,舟山城乡建设部网站首页EasyExcel动态表头多sheet录入,单元格操作样式,自动修改单元格格式
说明 EasyExcel是一款开源的Java库#xff0c;用于读取、写入和操作Excel文件。它是阿里巴巴集团开发的一款高效、功能丰富且易于使用的Excel操作工具。 EasyExcel提供了简洁的API#xff0c;使得读写Excel…EasyExcel动态表头多sheet录入,单元格操作样式,自动修改单元格格式
说明 EasyExcel是一款开源的Java库用于读取、写入和操作Excel文件。它是阿里巴巴集团开发的一款高效、功能丰富且易于使用的Excel操作工具。 EasyExcel提供了简洁的API使得读写Excel文件变得非常方便尤其适用于大量数据的导入导出操作。以下是EasyExcel的一些主要特性 读取和写入Excel文件EasyExcel提供了简单易用的API用于读取和写入Excel文件。你可以通过指定模型类来读取Excel文件的数据并将数据写入到Excel文件中。 高性能EasyExcel采用了基于事件驱动的模式在读取和写入时能够更高效地处理大量数据。它能够以极快的速度读取和写入Excel文件提高了数据处理的效率。 支持大数据量EasyExcel使用内存友好的方式进行数据读取和写入可以处理大量数据而不会导致内存溢出的问题。 导入导出灵活EasyExcel支持导入和导出多种格式的Excel文件包括xls和xlsx格式。你可以导入Excel文件的数据到Java对象中并将Java对象的数据导出为Excel文件。 数据转换EasyExcel提供了丰富的数据转换功能可以方便地进行数据格式转换、数据映射、日期格式化等操作。 监听器支持EasyExcel提供了监听器功能你可以自定义监听器来处理Excel读取和写入的过程实现一些自定义的业务逻辑。 多线程支持EasyExcel支持多线程并发读写Excel提高数据处理的速度。 自定义处理器
package com.csair.demo.util;import com.alibaba.excel.metadata.CellData;
import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.write.handler.CellWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
import org.apache.poi.ss.usermodel.*;
import org.thymeleaf.util.StringUtils;import java.util.List;public class CustomCellWriter implements CellWriteHandler {Overridepublic void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Head head, Integer integer, Integer integer1, Boolean aBoolean) {}Overridepublic void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Cell cell, Head head, Integer integer, Boolean aBoolean) {}Overridepublic void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, ListCellData list, Cell cell, Head head, Integer integer, Boolean aBoolean) {Sheet sheet writeSheetHolder.getSheet();Workbook workbook sheet.getWorkbook();Font font workbook.createFont();font.setColor(IndexedColors.RED.getIndex());CellStyle cellStyle workbook.createCellStyle();cellStyle.setFont(font);//获取表头总共有多少列short lastCellNum writeSheetHolder.getSheet().getRow(0).getLastCellNum();//过滤表头if (!aBoolean) {//获取当前行数int rowNum integer 1;//每一个单元格都会执行afterCellDispose此方法,每执行一次单元格数据1,此处是校验当前行的全部单元格加载完毕if (writeSheetHolder.getSheet().getRow(rowNum).getLastCellNum() lastCellNum) {//加载完毕执行业务代码(可按照自己实际业务进行修改)for (int i 0; i lastCellNum; i) {if (i % 2 ! 0) {//指定单元格修改样式writeSheetHolder.getSheet().getRow(rowNum).getCell(i).setCellStyle(cellStyle);}//录入的数据全部是String类型,直接获取就行,如果有不同类型数据,需要添加类型判断String stringCellValue writeSheetHolder.getSheet().getRow(rowNum).getCell(i).getStringCellValue();//setCellValue会根据数据自动修改单元格格式if (StringUtils.isEmpty(stringCellValue)) {writeSheetHolder.getSheet().getRow(rowNum).getCell(i).setCellValue();} else {writeSheetHolder.getSheet().getRow(rowNum).getCell(i).setCellValue(Double.parseDouble(stringCellValue));}}}}}
}
实现类
GetMapping(/export)public void export(HttpServletResponse response) {try {response.setContentType(application/vnd.openxmlformats-officedocument.spreadsheetml.sheet);response.setCharacterEncoding(utf-8);// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系String fileName URLEncoder.encode(文件名, UTF-8).replaceAll(\\, %20);response.setHeader(Content-disposition, attachment;filename*utf-8 fileName .xlsx);ListListString head1 new ArrayList();ListListString data1 new ArrayList();ListListString head2 new ArrayList();ListListString data2 new ArrayList();ExcelWriter excelWriter EasyExcel.write(response.getOutputStream()).registerWriteHandler(new CustomCellWriter()).build();excelWriter.write(data1, EasyExcel.writerSheet(sheet1).head(head1).build());excelWriter.write(data2, EasyExcel.writerSheet(sheet2).head(head2).build());//关闭流excelWriter.finish();} catch (Exception e) {e.printStackTrace();}}