当前我正在使用apache poi从Excel文件读取数据。
我很生气,可以通过Value获取columnIndex。
我的意思是,Excel文件包含10000行。
第二列包含emp名称列表,我想通过以下方式查找列索引 值。
均值:第10列中的Emp名称为“ Ra”,当我传递值时,我应该获得列索引。我需要不使用foreach或iterator的解决方案。
答案 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。