在apache POI中直接寻址单元

时间:2016-03-29 12:44:54

标签: java excel apache-poi

我想用apache POI修改现有的xlsm文件。

由于我只需要更改单个单元格,我不想在整个工作表上循环,但到目前为止我发现的所有示例都建议循环遍历所有行和所有单元格,检查是否当前行/ col-index匹配要更改的那个。

是否没有“随机访问”模式直接通过坐标获取单个单元格?有希望的getCell method of the CellUtil class需要行对象而不仅仅是整数坐标。

2 个答案:

答案 0 :(得分:1)

Excel文件格式是(通常)稀疏文件格式,因此通常会从文件中跳过未使用的+无样式的行和单元格。因此,您需要在获取行和单元格时检查空值。但是,除此之外,您可以直接获取单元格。您可以使用CellReference class将Excel样式的坐标集(例如B3)转换为POI样式(例如,行= 2,列= 1),然后获取

CellReference ref = new CellReference("B3");

Workbook workbook = WorkbookFactory.create(new File("input.xls"));
Sheet sheet = workbook.getSheetAt(0);

Row r = sheet.getRow(ref.getRow());
if (r == null) {
   // Handle this whole row being empty
} else {
   Cell c = r.getCell(ref.getCol(), Row.RETURN_BLANK_AS_NULL);
   if (c == null) {
      // Handle this cell being empty
   } else {
      // Do something with the cell
   }
}

根据您想要处理缺失的行或单元格的方式,您可以缩短它,但这将特定于您的需求

答案 1 :(得分:0)

首先从工作表中获取行,然后从中获取x,y的单元格:

Row myRow = getRow(int x, sheet);
Cell myCell = getCell(myRow, int y);