Sử dụng Apache POI, tôi có thể tìm thấy một loạt tên:Định nghĩa lại tên Excel Dải sau đó Save sử dụng Apache POI
XSSFName[] ranges = new XSSFName[workbook.getNumberOfNames()];
for (int i = 0; i < _wb.getNumberOfNames(); i++)
ranges[i] = workbook.getNameAt(i);
Với điều đó, tôi có thể di một AreaReference:
AreaReference area = new AreaReference(ranges[0].getRefersToFormula());
Và rồi cuối cùng tôi có thể nhận được tất cả các ô trong phạm vi đó:
CellReference[] cells = area.getAllReferencedCells();
đó là tất cả hoạt động tốt. Burt Tôi có một trường hợp sử dụng, nơi tôi phải xác định lại khu vực mà phạm vi bao gồm. Có cách nào làm được việc này không? Tôi nhận thấy rằng phương thức range.getRefersToFormula()
trả về một String, giống như MySheet!$A$1:$B$8
. Có một số range.setRefersToFormula(String formula)
, nhưng tôi phải tin rằng có một cách khác ngoài việc phải viết một trình phân tích cú pháp công thức excel cho riêng mình. Không có cách nào để tạo ra một AreaReference với một thiết lập để tham khảo Cell
của một cái gì đó loại an toàn hơn? Tôi có thực sự phải tạo ra một String
để đại diện cho phạm vi mới không? Tôi nghĩ rằng sẽ có API ở đâu đó để giúp tôi với điều này nhưng tôi dường như không thể tìm thấy nó.
Cập nhật
Tôi tìm thấy một số API, nhưng nó dường như không làm việc, ít nhất là nó không tiết kiệm đúng cách. Đây là những gì tôi đã làm.
AreaReference newArea = new AreaReference(firstCell, lastCell);
ranges[0].setRefersToFormula(newArea.formatAsString())
Dường như đặt công thức chính xác, nhưng khi tôi phát trực tuyến sổ làm việc ra đĩa, phạm vi hoàn toàn sai.