我想使用列名而不是列索引来获取特定工作表的单元格数据,
目前我可以使用获取单元格数据

fis = new FileInputStream(ExcelPath);
wb = new XSSFWorkbook(fis);
sh = wb.getSheet(SheetName);
cell = sh.getRow(rownum).getCell(colnum);


但我正在寻找一种可以获取细胞数据的方法,

cell = sh.getRow(rownum).getCell(ColName); //not working

最佳答案

Excel列没有名称。他们只有字母,例如A,D,BB

要弄清楚如何将Excel样式的列字母映射到基于POI样式的0索引,您需要使用方法convertColStringToIndex(java.lang.String ref)

如果您要基于第一行中保存的值查找一列,则应执行以下操作:

DataFormatter fmt = new DataFormatter();
Map<String,Integer> headings = new HashMap<String,Integer>();
Row headings = sheet.getRow(0);
if (headings == null) throw new IllegalArgumentException("Empty headings row");
for (Cell c : headings) {
    headings.put(fmt.formatCellValue(c), c.getColumnIndex());
}


如果您有更复杂的用例,例如标题运行在多行上,则需要编写更复杂的代码...所有这些都由您的用例驱动

07-27 13:31