2009-06-18 5 views
6

Ich arbeite derzeit an einer Java-Anwendung, die eine Vorlage Excel-Datei verwendet, die eine Pivot-Tabelle enthält.Refresh Pivot Tabelle mit Apache POI

Die Vorlagendatei enthält auch ein Datenblatt, das die Pivot-Tabelle sät. Dieses Datenblatt wird in der Java-Anwendung über die Apache POI-API dynamisch geladen.

Wenn ich die Excel-Datei öffne, muss ich die Pivot-Tabelle manuell aktualisieren, um die Daten korrekt geladen zu bekommen.

Gibt es eine Möglichkeit, die Pivot-Tabelle mit der POI-API zu aktualisieren, so muss ich es nicht manuell tun?

+0

Ich habe eine Verpflichtung, und ich bin gespannt, wie Sie Ihre Pivot-Tabelle auf dem Datenblatt basieren erzielt. Ich habe eine Vorlage Excel-Blatt, die ich mit Daten mit Apache Poi füllen. Allerdings habe ich Probleme, meine Pivot-Tabelle auf diese gefüllten Daten zu stützen. irgendwelche Ideen ?? – Ash

+0

Hilfe hier? – Ash

+0

Ich habe auch Probleme, dass, wenn ich Daten in Quellblättern ausfüllen und dann die Datei über die Festplatte schreiben, die Pivot-Tabelle in der resultierenden Datei nicht intakt ist. Ich benutze JXL für diesen Zweck. Jede Hilfe wird sehr geschätzt, wenn ich feststecke. –

Antwort

1

Die grundlegende Antwort darauf ist nein. POI ist ein Dokumentenformatleser und -schreiber. Das Aktualisieren der Pivot-Tabelle ist ein Problem der Excel-Engine. Sicher, eine andere Anwendung könnte versuchen, das Excel-Engine-Verhalten hier zu duplizieren, aber das wird wirklich hässlich werden. Ich empfehle die Verwendung von Joel's Workaround des Zugriffs auf die Excel-COM-Objekte über einen Webservice, um so etwas zu erledigen.

3

Dieser Beitrag sagt, dass Sie auf eine Option auf der Pivot-Tabelle drehen kann, die dazu führen, wird es sich jedes Mal, wenn die Arbeitsmappe automatisch aktualisieren wird geöffnet:

How can I refresh all the pivot tables in my excel workbook with a macro?

Hoffentlich noch wahr sein, nachdem Sie haben verwendet Apache POI zum Aktualisieren oder Erweitern der Datenzeilen, auf denen die Pivot-Tabellen basieren.

4

Es ist möglich. In der PivotCacheDefinition gibt es ein Attribut refreshOnLoad, das auf true eingestellt werden kann. Der Cache wird dann aktualisiert, wenn die Arbeitsmappe geöffnet wird. More information here.

In POI kann dies durch Aufruf der Methode setRefreshOnLoad(boolean bool) erfolgen, die einen booleschen Parameter als Parameter für eine CTPivotCacheDefinition verwendet.

EDIT: Der Apache POI bietet jetzt die Möglichkeit, Pivot-Tabellen zu erstellen und die Pivot-Tabelle wird beim Laden als Standard aktualisiert. Class XSSFPivotTable

+0

Rufen Sie die Methode auf welches Objekt auf? Ich meine 'setRefreshOnLoad (boolean bool)'. –

+0

Auf einer CTPivotCacheDefinition. – Solitude

+1

Dies funktioniert nicht, wenn die Pivot-Tabelle bereits im Excel-Dokument existiertes wird * über Apache POI * gelesen * nicht * erstellt *). Der Aufruf von 'myXSSFPivotTable.getPivotCacheDefinition()' gibt immer null zurück. – SebastianH

5

Sie können einfach eine Option aktivieren, die die Pivot-Tabelle jedes Mal aktualisiert, wenn die Datei geöffnet wird.

Diese Microsoft documentation sagt:

in der Pivottable Dialogfeld Optionen auf der Registerkarte Daten, wählen Sie die Daten aktualisieren, wenn das Kontrollkästchen Datei zu öffnen.

+0

Apache POI überschreibt es. –

+1

+1! Diese Antwort lieferte nicht nur eine Lösung für dieses Problem, sondern zeigte mir eine sehr nützliche Excel-Option, auch wenn ich nicht mit Apache POI arbeite :) Und in meinem Fall überschreibt Apache POI ** es ** nicht! Ich erstelle oder manipuliere die Pivot-Tabelle nicht als solche über POI. Ich aktualisiere nur die Datenblätter, auf die sich die Pivot-Diagramme beziehen. – SebastianH

+0

Kann ich dasselbe in JXL erreichen? Ich schreibe die Datenblätter, aber wenn JXL die Datei schreibt, wird nur die Pivot-Tabelle entfernt. Brauchen Sie Hilfe in dieser Hinsicht. –

0

Dies könnte funktionieren:

XSSFPivotTable pivotTable = pivotSheet.getPivotTables().get(0);  
pivotTable.getPivotCacheDefinition().getCTPivotCacheDefinition().setRefreshOnLoad(true); 
+0

gibt es keine solche Methode getPivotTables() für XSSFPivotTable-Objekt. POI liest und schreibt Excel-Dokumente. Die Pivot-Tabelle ist in Excel intern und die Excel-Engine kümmert sich darum. Excel Engine stellt sicher, dass die Pivot-Tabelle aktualisiert wird, wenn sich die Daten ändern. Es gibt ein AutoRefresh beim Laden des Excel-Dokuments –