使用Apache POI,我能夠找到一個名爲範圍:重新定義命名的Excel範圍,然後保存使用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();
這一切都工作得很好。伯特我有一個用例,我必須重新定義範圍覆蓋的區域。有沒有辦法做到這一點?我注意到range.getRefersToFormula()
方法返回一個字符串,類似MySheet!$A$1:$B$8
。有一個range.setRefersToFormula(String formula)
,但我必須相信有一種方法,而不是訴諸自己編寫一個Excel範圍公式分析器。有沒有辦法生成一個AreaReference的設置爲Cell
引用更安全的類型?我實際上是否必須生成String
來表示新範圍?我想會有API來幫助我,但我似乎無法找到它。
更新
我發現了一些API,但它似乎沒有工作,至少它不正確保存。這就是我所做的。
AreaReference newArea = new AreaReference(firstCell, lastCell);
ranges[0].setRefersToFormula(newArea.formatAsString())
它似乎正確地設置公式,但是當我將工作簿重新流出到磁盤時,範圍是完全錯誤的。