You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Apache POI读取Excel多行多列并匹配滑块类型问题传值至对应类

使用Apache POI读取Excel多行多列并处理Slider类型问题

嘿,我来帮你搞定这个需求!下面我会一步步拆解怎么用Apache POI读取Excel数据,并且把匹配到的slider类型问题数据封装到对应类里。

第一步:添加Apache POI依赖

首先得确保你的项目里引入了Apache POI的相关依赖,如果是Maven项目,把下面这段加到pom.xml里:

<dependencies>
    <!-- Apache POI for Excel handling -->
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>5.2.5</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>5.2.5</version>
    </dependency>
</dependencies>

(版本可以根据你需要调整到最新稳定版)

第二步:基础读取Excel多行多列数据

Apache POI区分.xls(HSSF)和.xlsx(XSSF)格式,不过现在用WorkbookFactory可以自动适配两种格式,不用手动判断,非常方便。

核心流程是:

  • 加载Excel文件到Workbook对象
  • 获取目标工作表(可以按索引或名称指定)
  • 遍历每一行(记得跳过表头行)
  • 遍历每行的单元格,读取对应数据

第三步:匹配Slider类型并封装到对应类

假设你已经创建了SliderQuestion类,用来存储滑块类型问题的数据,比如这样:

public class SliderQuestion {
    private String questionText;
    private int minValue;
    private int maxValue;
    private int defaultValue;

    // 构造函数、getter和setter方法
    public SliderQuestion(String questionText, int minValue, int maxValue, int defaultValue) {
        this.questionText = questionText;
        this.minValue = minValue;
        this.maxValue = maxValue;
        this.defaultValue = defaultValue;
    }

    // 省略getter和setter
    @Override
    public String toString() {
        return "SliderQuestion{" +
                "questionText='" + questionText + '\'' +
                ", minValue=" + minValue +
                ", maxValue=" + maxValue +
                ", defaultValue=" + defaultValue +
                '}';
    }
}

接下来是完整的读取和处理代码,你可以直接参考:

import org.apache.poi.ss.usermodel.*;

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

public class ExcelReader {
    public static void main(String[] args) {
        String excelFilePath = "path/to/your/attachment.xlsx"; // 替换成你的附件实际路径
        List<SliderQuestion> sliderQuestions = new ArrayList<>();

        try (FileInputStream fis = new FileInputStream(excelFilePath);
             Workbook workbook = WorkbookFactory.create(fis)) {

            // 获取第一个工作表,也可以用workbook.getSheet("SheetName")按名称获取
            Sheet sheet = workbook.getSheetAt(0);

            // 遍历行,从第2行开始(假设第1行是表头)
            for (int rowNum = 1; rowNum <= sheet.getLastRowNum(); rowNum++) {
                Row row = sheet.getRow(rowNum);
                if (row == null) continue; // 跳过空行

                // 获取问题类型单元格(假设问题类型在第2列,索引从0开始)
                Cell questionTypeCell = row.getCell(1);
                if (questionTypeCell == null) continue;

                String questionType = getCellValueAsString(questionTypeCell);
                // 匹配slider类型,忽略大小写避免格式问题
                if ("slider".equalsIgnoreCase(questionType)) {
                    // 读取对应列的数据,假设问题文本在第1列,min在第3列,max在第4列,默认值在第5列
                    String questionText = getCellValueAsString(row.getCell(0));
                    int minValue = (int) row.getCell(2).getNumericCellValue();
                    int maxValue = (int) row.getCell(3).getNumericCellValue();
                    int defaultValue = (int) row.getCell(4).getNumericCellValue();

                    // 封装到SliderQuestion类
                    sliderQuestions.add(new SliderQuestion(questionText, minValue, maxValue, defaultValue));
                }
            }

            // 打印结果验证
            System.out.println("读取到的Slider类型问题:");
            for (SliderQuestion sq : sliderQuestions) {
                System.out.println(sq);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    // 工具方法:统一处理不同类型的单元格,转为字符串返回
    private static String getCellValueAsString(Cell cell) {
        if (cell == null) return "";
        switch (cell.getCellType()) {
            case STRING:
                return cell.getStringCellValue();
            case NUMERIC:
                if (DateUtil.isCellDateFormatted(cell)) {
                    return cell.getDateCellValue().toString();
                } else {
                    return String.valueOf((int) cell.getNumericCellValue());
                }
            case BOOLEAN:
                return String.valueOf(cell.getBooleanCellValue());
            case FORMULA:
                return cell.getCellFormula();
            default:
                return "";
        }
    }
}

一些需要注意的细节

  • 单元格索引:要根据你实际Excel的列位置调整代码中的索引(比如问题类型在第几列,数据列在第几列)
  • 单元格类型处理:Excel单元格有字符串、数字、日期等多种类型,用getCellValueAsString工具方法可以统一处理,避免类型转换异常
  • 资源关闭:用try-with-resources语法自动关闭FileInputStream和Workbook,不用手动处理资源释放
  • 空行/空单元格:代码里加入了空行和空单元格的判断,避免出现NullPointerException

这样就能完成你的需求啦——读取Excel多行多列数据,匹配到slider类型时自动封装到对应的类中。

内容的提问来源于stack exchange,提问作者swapnil bargale

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:35:29