ExcelUtils.java 1.69 KB
package com.diligrp.tax.adopt.util;

import com.diligrp.tax.central.exception.TaxAgentServiceException;
import com.diligrp.tax.central.type.TaxSystemType;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DataFormatter;
import org.apache.poi.ss.usermodel.Workbook;

import java.util.*;

/**
 * @Author: zhangmeiyang
 * @CreateTime: 2025-11-19 15:11
 * @Version: todo
 */
@Slf4j
public class ExcelUtils {
    public static List<Map<String, Object>> processSheet(Workbook book) {
        var res = new ArrayList<Map<String, Object>>();
        Optional.ofNullable(book).orElseThrow(() -> new TaxAgentServiceException(TaxSystemType.ABNORMAL_PARAMETERS, "文件转换异常"));
        var header = new HashMap<Integer, String>();
        book.sheetIterator().forEachRemaining(sheet -> sheet.rowIterator().forEachRemaining(row -> {
            switch (row.getRowNum()) {
                case 0 -> log.info("sheetName: {}", sheet.getSheetName());
                case 1 -> row.cellIterator().forEachRemaining(cell -> header.put(cell.getColumnIndex(), cell.getStringCellValue()));
                default -> {
                    var map = new HashMap<String, Object>();
                    row.cellIterator().forEachRemaining(cell -> map.put(header.get(cell.getColumnIndex()), getStringCellValue(cell)));
                    res.add(map);
                }
            }
        }));
        return res;
    }

    private static String getStringCellValue(Cell cell) {
        DataFormatter formatter = new DataFormatter();
        String rawValue = formatter.formatCellValue(cell); // 获取单元格显示值
        return rawValue.trim().isEmpty() ? null : rawValue;
    }
}