如何使用Apache poi按值查找Excel列索引

时间:2018-10-07 16:04:18

标签: apache apache-poi

当前我正在使用apache poi从Excel文件读取数据。

我很生气,可以通过Value获取columnIndex。

我的意思是,Excel文件包含10000行。

第二列包含emp名称列表,我想通过以下方式查找列索引 值。

均值:第10列中的Emp名称为“ Ra”,当我传递值时,我应该获得列索引。我需要不使用foreach或iterator的解决方案。

1 个答案:

答案 0 :(得分:0)

尝试一下:

import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.poi.xssf.model.SharedStringsTable;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class Search {

    public static void main(String[] args) throws IOException {
        String path = "src/test.xlsx";
        String param = "Ra";
        try (FileInputStream in = new FileInputStream(path); 
                XSSFWorkbook w = new XSSFWorkbook(in)) {

            List<Integer> lstStringIndex = new ArrayList<>();
            SharedStringsTable stringsTable = w.getSharedStringSource();
            for (int i = 0; i < stringsTable.getCount(); i++) {
                if (stringsTable.getEntryAt(i).getT().contains(param)) {
                    lstStringIndex.add(i);
                }
            }

            XSSFSheet s = w.getSheetAt(0);
            String xml = s.getCTWorksheet().xmlText();
            for (Integer i : lstStringIndex) {
                Pattern p = Pattern.compile("(?<=<main:c r=\")[A-Z0-9]+(?=\" t=\"s\"><main:v>" + i + "</main:v>)");
                Matcher m = p.matcher(xml);
                if(m.find()) {
                    System.out.println(m.group());
                }
            }
        }
    }
}

上面的代码将打印出包含“ Ra”的任何单元格的地址。
我正在使用Apache poi 3.14 btw。