导出Excel,支持最佳

列表信息导出为Excel文件,

依赖pom:

XML 复制代码
Sheet, Row:
   
<dependency>
     <groupId>org.apache.poi</groupId>
     <artifactId>poi</artifactId>
</dependency>


XSSFWorkbook
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
</dependency>
复制代码
实现代码: 

override表示是否覆盖现有文件,false,追加;true,覆盖。

java 复制代码
private <T> void exportExcelToLocal(List<T> list, Class<T> clazz) throws IOException {
        if (CollectionUtils.isEmpty(list)) {
            return;
        }

        XSSFWorkbook workbook = null;
        File file = new File("src/main/resources/xxx.xlsx");
        FileInputStream fis = null;
        if (!file.exists()) {
            file.createNewFile();
        } else {
            if (!override) {
                fis = new FileInputStream(file);
                workbook = new XSSFWorkbook(fis);
            }
        }

        XSSFWorkbook workbookResult = ExcelUtils.exportExcelData(new XSSFWorkbook(), list, clazz, false);

        if (Objects.nonNull(workbook)) {
            Integer index = workbookResult.getSheetAt(0).getLastRowNum() + 1;

            Sheet sheet = workbookResult.getSheetAt(0);

            Sheet lastSheet = workbook.getSheetAt(0);

            for (int i = 1; i <= lastSheet.getLastRowNum(); ++i) {
                Row row = sheet.createRow(index++);

                for (int cellIndex = 0; cellIndex < lastSheet.getRow(i).getLastCellNum(); ++cellIndex) {
                    String value = lastSheet.getRow(i).getCell(cellIndex).getStringCellValue();
                    row.createCell(cellIndex).setCellValue(value);
                }
            }
        }


        FileOutputStream fos = new FileOutputStream(file);
        workbookResult.write(fos);
        fos.flush();
        fos.close();
        if (Objects.nonNull(fis)) {
            fis.close();
        }
    }

ExcelUtils:

单次导出操作

java 复制代码
public static <T> XSSFWorkbook exportExcelData(XSSFWorkbook workbook, List<T> data, Class<T> clazz, boolean template) {
        XSSFSheet sheet = workbook.createSheet();
        Row rowHeader = sheet.createRow(0);
        Map<Integer, Field> fieldMap = analysisAnnotation(clazz);

        for(int i = 0; i < fieldMap.size(); ++i) {
            Cell cell = rowHeader.createCell(i);
            Field field = (Field)fieldMap.get(i + 1);
            ExcelBind ea = (ExcelBind)field.getAnnotation(ExcelBind.class);
            cell.setCellValue(ea.columnName());
            cell.setCellStyle(setRowHeaderStyle(workbook));
            cell.setCellType(CellType.STRING);
        }

        if (!template) {
            analysisData(sheet, data, clazz, fieldMap);
        }

        return workbook;
    }



// 数据导出
private static <T> void analysisData(Sheet sheet, List<T> data, Class<T> clazz, Map<Integer, Field> fieldMap) {
        for(int i = 0; i < data.size(); ++i) {
            Row row = sheet.createRow(i + 1);
            T t = data.get(i);
            Class<?> aClass = t.getClass();

            for(int j = 0; j < fieldMap.size(); ++j) {
                Field declaredField = (Field)fieldMap.get(j + 1);
                declaredField.setAccessible(true);
                String key = declaredField.getName();
                Object value = "";

                try {
                    value = declaredField.get(t) == null ? "" : declaredField.get(t);
                } catch (IllegalAccessException var13) {
                    var13.printStackTrace();
                }

                if ("java.util.Date".equals(declaredField.getType().getName())) {
                    ExcelBind ea = (ExcelBind)declaredField.getAnnotation(ExcelBind.class);
                    if (StringUtils.isNotEmpty(ea.dateFormat())) {
                        value = (new SimpleDateFormat(ea.dateFormat())).format(value);
                    }
                }

                row.createCell(j).setCellValue(value.toString());
            }
        }

    }
相关推荐
万邦科技Lafite6 小时前
京东开放API接口:item_get返回参数指南
java·前端·javascript·api·电商开放平台
曹牧6 小时前
Java:处理 HTTP 请求的 Content-Type
java·开发语言
SamDeepThinking6 小时前
第1篇-开篇词:几亿用户规模下,我们是怎么做C端高并发商品系统的
java·后端·架构
weisian1516 小时前
Java并发编程--47-分布式ID生成器:雪花算法(Snowflake)与时钟回拨问题
java·算法·时钟回拨·雪花算法id
itzixiao6 小时前
L1-066 猫是液体(5分)[java][python]
java·开发语言·python·算法
冷小鱼6 小时前
MyBatis 与 MyBatis-Plus:从入门到精通的完整指南
java·tomcat·mybatis
DolphinScheduler社区7 小时前
DolphinScheduler 3.3.2 如何调用 DataX 3.0 + SeaTunnel 2.3.12?附 Demo演示!
java·spark·apache·海豚调度·大数据工作流调度
亦暖筑序7 小时前
AI 客服系统安全加固:JWT 鉴权 + Bucket4j 三层限流
java·架构
xhuiting7 小时前
项目技术总结
java
某人辛木7 小时前
JDK安装配置
java·开发语言