apache的poi工具

225 阅读1分钟
package com.example.demo.test;

import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.util.CellRangeAddress;

import java.util.HashMap;
import java.util.Map;

/**
 * @description: 使用开源的 Apache 的 poi 工具包 对excel中的数据行和单元格进行判断
 * @author: zlf
 * @create: 2022/4/7 9:19
 **/
public class ExcelUtils {
    /**
     * 判断指定的单元格是否是合并单元格
     *
     * @param sheet
     * @param row    行下标
     * @param column 列下标
     * @return
     */
    public Map<String, String> isMergedRegion(Sheet sheet, int row, int column) {

        Map<String, String> map = new HashMap<>();
        //判断结果
        String flag = "false";
        //当前行
        String r = "-1";
        //当前列
        String c = "-1";
        //最大row
        String mr = String.valueOf(row);
        map.put("Row", r);
        map.put("Col", c);
        map.put("Result", flag);
        map.put("MaxRow", mr);
        // 得到一个sheet中有多少个合并单元格
        int sheetMergeCount = sheet.getNumMergedRegions();
        for (int i = 0; i < sheetMergeCount; i++) {
            // 获取合并后的单元格
            CellRangeAddress range = sheet.getMergedRegion(i);
            int firstColumn = range.getFirstColumn();
            int lastColumn = range.getLastColumn();
            int firstRow = range.getFirstRow();
            int lastRow = range.getLastRow();
            if (row >= firstRow && row <= lastRow) {
                if (column >= firstColumn && column <= lastColumn) {
                    flag = "true";
                    map.put("Row", String.valueOf(firstRow));
                    map.put("Col", String.valueOf(firstColumn));
                    map.put("Result", flag);
                    map.put("MaxRow", String.valueOf(lastRow));
                    return map;
                }
            }
        }
        return map;
    }


    /**
     * 判断指定的行是否是合并行以及最大行值
     *
     * @param sheet
     * @param row    行下标
     * @param column 列下标
     * @return
     */
    public Map<String, String> isMergedRow(Sheet sheet, int row, int column) {


        Map<String, String> map = new HashMap<String, String>();
        //判断结果
        String flag = "false";
        //最大row
        String mr = String.valueOf(row);
        map.put("Results", flag);
        map.put("MaxRow", mr);
        // 得到一个sheet中有多少个合并单元格
        int sheetMergeCount = sheet.getNumMergedRegions();
        for (int i = 0; i < sheetMergeCount; i++) {
            // 获取合并后的单元格
            CellRangeAddress range = sheet.getMergedRegion(i);
            int firstColumn = range.getFirstColumn();
            int lastColumn = range.getLastColumn();
            int firstRow = range.getFirstRow();
            int lastRow = range.getLastRow();
            if (row >= firstRow && row <= lastRow) {
                if (column >= firstColumn && column <= lastColumn) {
                    flag = "true";
                    map.put("Results", flag);
                    map.put("MaxRow", lastRow + "");
                    return map;
                }
            }
        }
        return map;

    }
}