Definieren Sie den benannten Excel-Bereich neu und speichern Sie ihn mit dem Apache-POI

Mit dem Apache POI kann ich einen benannten Bereich finden:

XSSFName[] ranges = new XSSFName[workbook.getNumberOfNames()];
for (int i = 0; i < _wb.getNumberOfNames(); i++)
    ranges[i] = workbook.getNameAt(i);

Damit kann ich eine AreaReference zellen:

AreaReference area = new AreaReference(ranges[0].getRefersToFormula());

Und dann kann ich endlich alle Zellen in diesem Bereich bekommen:

CellReference[] cells = area.getAllReferencedCells();

Das alles funktioniert gut. Burt Ich habe einen Anwendungsfall, in dem ich den Bereich, den der Bereich abdeckt, neu definieren muss. Gibt es eine Möglichkeit, das zu tun? Ich merke, dass dierange.getRefersToFormula() Methode gibt einen String zurück, so etwas wieMySheet!$A$1:$B$8. Da ist einrange.setRefersToFormula(String formula), aber ich muss glauben, dass es eine andere Möglichkeit gibt, als selbst einen Excel-Range-Formel-Parser zu schreiben. Gibt es keine Möglichkeit, eine AreaReference mit einem Satz von zu generierenCell Hinweise auf etwas typsichereres? Muss ich eigentlich eine generieren?String das neue Sortiment darstellen? Ich würde denken, dass es irgendwo eine API geben würde, die mir dabei hilft, aber ich kann sie anscheinend nicht finden.

Aktualisieren

Ich habe ein API gefunden, aber es scheint nicht zu funktionieren, zumindest wird es nicht richtig gespeichert. Hier ist was ich getan habe.

AreaReference newArea = new AreaReference(firstCell, lastCell);
ranges[0].setRefersToFormula(newArea.formatAsString())

Es scheint, die Formel richtig einzustellen, aber wenn ich die Arbeitsmappe wieder auf die Festplatte streame, ist der Bereich völlig falsch.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage