使用 Apache POI,我可以找到一个命名范围:
XSSFName[] ranges = new XSSFName[workbook.getNumberOfNames()];
for (int i = 0; i < _wb.getNumberOfNames(); i++)
ranges[i] = workbook.getNameAt(i);
有了这个,我可以单元格一个AreaReference:
AreaReference area = new AreaReference(ranges[0].getRefersToFormula());
最后我可以得到该范围内的所有单元格:
CellReference[] cells = area.getAllReferencedCells();
这一切都很好。Burt 我有一个用例,我必须重新定义范围覆盖的区域。有没有办法做到这一点?我注意到该range.getRefersToFormula()
方法返回一个字符串,类似于MySheet!$A$1:$B$8
. 有一个range.setRefersToFormula(String formula)
,但我必须相信除了自己编写一个 excel 范围公式解析器之外,还有其他方法。有没有办法用一组Cell
更类型安全的引用来生成 AreaReference?我真的必须生成一个String
来代表新的范围吗?我认为在某个地方会有 API 可以帮助我解决这个问题,但我似乎找不到它。
更新
我找到了一些API,但它似乎不起作用,至少它没有正确保存。这就是我所做的。
AreaReference newArea = new AreaReference(firstCell, lastCell);
ranges[0].setRefersToFormula(newArea.formatAsString())
似乎正确设置了公式,但是当我将工作簿流式传输回磁盘时,范围完全错误。