Java.Utils:Excel转Json

Don't say much, just go to the code.

java 复制代码
package org.bood.common.utils;

import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Excel转Json
 *
 * @author bood
 * @since 2024/10/30
 */
public class ExcelToJsonConverter {

    public static void main(String[] args) {
        String excelFilePath = "/Users/bood/Downloads/*.xlsx";
        try {
            List<Map<String, Object>> jsonData = convertExcelToJson(excelFilePath);
            ObjectMapper objectMapper = new ObjectMapper();
            String jsonString = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(jsonData);
            System.out.println(jsonString);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 将Excel文件转换为JSON格式的数据
     * 此方法读取Excel文件的内容,并将其转换为一个包含多个键值对的列表
     * 每个键值对代表Excel中的一个单元格,键是列标题,值是单元格的值
     *
     * @param filePath Excel文件的路径
     * @return 包含多个键值对的列表,每个键值对代表Excel中的一个单元格
     * @author bood
     * @since 2024/12/02
     */
    public static List<Map<String, Object>> convertExcelToJson(String filePath) throws IOException {
        List<Map<String, Object>> jsonData = new ArrayList<>();
        try (FileInputStream fis = new FileInputStream((filePath));
             Workbook workbook = new XSSFWorkbook(fis)) {
            // 获取第一个工作表
            Sheet sheet = workbook.getSheetAt(0);
            Row headerRow = sheet.getRow(0);
            List<String> headers = new ArrayList<>();
            // 获取列标题(KEY)
            for (Cell cell : headerRow) {
                headers.add(cell.toString());
            }
            // 读取数据行
            for (int i = 1; i <= sheet.getLastRowNum(); i++) {
                Row row = sheet.getRow(i);
                if (row == null) continue;
                Map<String, Object> jsonRow = new HashMap<>();
                for (int j = 0; j < row.getPhysicalNumberOfCells(); j++) {
                    Cell cell = row.getCell(j);
                    jsonRow.put(headers.get(j), getCellValue(cell));
                }
                jsonData.add(jsonRow);
            }
        }
        return jsonData;
    }

    private static Object getCellValue(Cell cell) {
        switch (cell.getCellTypeEnum()) {
            case STRING:
                return cell.getStringCellValue();
            case BOOLEAN:
                return cell.getBooleanCellValue();
            case NUMERIC:
                if (DateUtil.isCellDateFormatted(cell)) {
                    return cell.getDateCellValue();
                } else {
                    return Double.valueOf(cell.getNumericCellValue()).longValue();
                }
            case FORMULA:
                return cell.getCellFormula();
            case BLANK:
                return null;
            default:
                return null;
        }
    }

}
相关推荐
llwszx1 小时前
深入理解Java锁原理(一):偏向锁的设计原理与性能优化
java·spring··偏向锁
云泽野1 小时前
【Java|集合类】list遍历的6种方式
java·python·list
二进制person2 小时前
Java SE--方法的使用
java·开发语言·算法
小阳拱白菜3 小时前
java异常学习
java
FrankYoou4 小时前
Jenkins 与 GitLab CI/CD 的核心对比
java·docker
麦兜*4 小时前
Spring Boot启动优化7板斧(延迟初始化、组件扫描精准打击、JVM参数调优):砍掉70%启动时间的魔鬼实践
java·jvm·spring boot·后端·spring·spring cloud·系统架构
KK溜了溜了5 小时前
JAVA-springboot 整合Redis
java·spring boot·redis
天河归来5 小时前
使用idea创建springboot单体项目
java·spring boot·intellij-idea
weixin_478689765 小时前
十大排序算法汇总
java·算法·排序算法
码荼5 小时前
学习开发之hashmap
java·python·学习·哈希算法·个人开发·小白学开发·不花钱不花时间crud