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;
        }
    }

}
相关推荐
Python ml5 分钟前
Tomcat与纯 Java Socket 实现远程通信的区别
java·开发语言·tomcat
qq_12498707538 分钟前
原生小程序+springboot+vue医院医患纠纷管理系统的设计与开发(程序+论文+讲解+安装+售后)
java·数据库·spring boot·后端·小程序·毕业设计
伊成33 分钟前
一文详解Spring Boot如何配置日志
java·spring boot·单元测试
lybugproducer41 分钟前
浅谈 Redis 数据类型
java·数据库·redis·后端·链表·缓存
purrrew1 小时前
【Java ee初阶】网络编程 UDP socket
java·网络·网络协议·udp·java-ee
上海合宙LuatOS1 小时前
全栈工程师实战手册:LuatOS日志系统开发指南!
java·开发语言·单片机·嵌入式硬件·物联网·php·硬件工程
多敲代码防脱发1 小时前
导出导入Excel文件(详解-基于EasyExcel)
java·开发语言·jvm·数据库·mysql·excel
一刀到底2112 小时前
做为一个平台,给第三方提供接口的时候,除了要求让他们申请 appId 和 AppSecret 之外,还应当有哪些安全选项,要过等保3级
java·网络·安全
wjcurry2 小时前
我的实习日报
java·redis·mysql