我想使用列名而不是列索引来获取特定工作表的单元格数据,
目前我可以使用获取单元格数据
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());
}
如果您有更复杂的用例,例如标题运行在多行上,则需要编写更复杂的代码...所有这些都由您的用例驱动