Neu definieren Benannte Excel-Bereich dann Speichern, Apache-POI
Apache POI, ich bin in der Lage, einen benannten Bereich:
XSSFName[] ranges = new XSSFName[workbook.getNumberOfNames()];
for (int i = 0; i < _wb.getNumberOfNames(); i++)
ranges[i] = workbook.getNameAt(i);
Mit, dass, ich bin in der Lage, cell zu einem AreaReference:
AreaReference area = new AreaReference(ranges[0].getRefersToFormula());
... Und dann endlich bekomme ich alle Zellen innerhalb dieses Bereichs:
CellReference[] cells = area.getAllReferencedCells();
Dass alles funktioniert Prima. Burt ich habe einen Anwendungsfall, in dem ich neu zu definieren den Bereich, der den Bereich abdeckt. Gibt es eine Möglichkeit, das zu tun? Ich merke, dass die range.getRefersToFormula()
- Methode einen String zurückgeben, so etwas wie MySheet!$A$1:$B$8
. Es ist ein range.setRefersToFormula(String formula)
, aber ich habe zu glauben, dass es einen Weg gibt, andere als Rückgriff auf das schreiben einer excel-Bereich der Formel-parser auf meine eigenen. Gibt es keine Möglichkeit generieren ein AreaReference mit einem Satz zu Cell
Verweise von etwas mehr geben-sicher? Habe ich tatsächlich zu generieren String
zur Darstellung der neuen Reihe? Ich würde denken, es wäre die API irgendwo, mir damit zu helfen, aber ich kann nicht scheinen, um es zu finden.
Update
Fand ich einige API, aber es scheint nicht zu funktionieren, zumindest ist es nicht korrekt gespeichert. Hier ist, was ich Tat.
AreaReference newArea = new AreaReference(firstCell, lastCell);
ranges[0].setRefersToFormula(newArea.formatAsString())
Scheint es um die Formel richtig, aber wenn ich den stream der Arbeitsmappe wieder auf die Festplatte, die Reichweite ist völlig falsch.
Du musst angemeldet sein, um einen Kommentar abzugeben.
können Sie ein update der vorhandenen Referenz und legen Sie es wie pro Ihre Anforderung.
Angenommen, die Referenz enthält
TestSheet!$A$1:$B$8
und Sie es ändern möchten, umMySheet!$B$5:$C$12
Für jede Zelle, sagen, "B5", zur Laufzeit,
geben Sie Zellbezug (so in etwa... wird er Sie wieder "B5")
geben Sie die Spalte Referenz (geben Sie "B", wenn die aktuelle Zelle B5). Jetzt
geben Sie Zeilen-Index (geben Sie "5", wenn die aktuelle Zelle B5).
Durch die gleiche Weise können Sie Holen Sie sich Ihre start-und end-Zelle Verweise (sagen wir B5 und C12).
Kommt nun, wie kann ich ein update der vorhandenen Verweise. Aktualisieren Sie einfach dessen Wert mit neu erstellten Referenz string