Ich habe den folgenden Code, um die Excel-Datei auszufüllen, mit Informationen, die ich mit Jsoup aus dem Internet bekomme.
%Vor%Mit diesem obigen Code kann ich nur eine Zeile füllen, dann bekomme ich diesen Fehler
%Vor%Kann mir jemand sagen, was ich vier mache? Vielen Dank.
Das Problem liegt darin, dass Ihre FileOutputStream
Variable out
mehr als einmal für dieselbe Workbook
verwendet wird. Durch das Öffnen und Schließen von FileOutputStream
out
in der Schleife wird die Ausnahme behoben. POI und / oder die XML / ZIP-Bibliothek möchten nicht denselben Stream mehrmals verwenden.
Wenn Sie den gleichen Code verwenden, den Sie mit 1 Schleife hatten, funktioniert er, mit 2, stürzt er mit der Ausnahme ab, die Sie haben.
Hier ist eine kurze Beschreibung mit einem einfachen Code, um zu ersetzen, was der JSoup-Code getan hat:
%Vor% Im aktuellen Code versuchen Sie, ClubInformation.xlsx
in ein Blatt von Voetbalclubs.xlsx
zu schreiben. Daher gibt es einen Fehler. (xslx ist ein XML-Format, daher erhalten Sie einen Fehler beim Schreiben von /docProps/app.xml
).
Ich habe Ihren Code wie folgt geändert. Ändern Sie die Zeile List<String> urlList = Arrays.asList("http://google.com");
nach Ihrem Bedarf.
Lass es mich wissen, wenn das funktioniert
Erstellen Sie ein Testprogramm der letzten 13 Zeilen mit festen Normalwerten. Wenn dies ebenfalls fehlschlägt, ist das Problem wahrscheinlich die Eingabevorlage. Wenn das funktioniert, sind die Werte, die du von Soup erhältst, das Problem. Drucken Sie sie, um zu sehen, ob es seltsame Werte gibt.
Wenn Sie nur das kleinere Programm mit 13 Zeilen eingeben, erhöht sich auch die Wahrscheinlichkeit, Antworten zu erhalten. Und natürlich können Sie versuchen, eine andere Voetbalclubs.xlsx-Datei zum Spaß zu verwenden.
Erstens: Es ist besser, mit einem Arbeitsbeispiel zu beginnen und sich von dort aus zu arbeiten. Beginnen Sie also mit dem Beispielcode, der eine einfache Zeichenfolge in eine einzelne Zelle schreibt, ein neues Blatt, schreiben Sie dann in ein vorhandenes Blatt in einem lokalen Dateisystem und schreiben Sie erst dann Daten, die Sie aus dem Web analysiert haben. Auf diese Weise haben Sie, wenn Sie auf Probleme stoßen, eine bessere Idee, wo Sie nach einer Lösung suchen sollten.
Die Ausnahme, die Sie auflisten, ist die generische Ausnahme, die von ZipPackage beim Speichern schlägt fehl:
%Vor% Die Methode marshall
für defaultPartMarshaller gibt false zurück und die interne Ausnahme, die die Ursache des Fehlers ist, ist verloren.
Der DefaultMarshaller tut nicht viel, er fordert den Teil einfach auf, sich in OutputStream zu speichern.
Von dort wird es weniger sicher, welche Art von PackagePart gespeichert wird. Aber zum Beispiel die ZipPartMarshaller fängt alle auftretenden Ausnahmen ab und protokolliert sie, bevor sie false zurückgibt:
%Vor%Könnten Sie sich also den Rest der Ausgabe ansehen, um zu sehen, ob vor dieser Ausnahme noch relevante Informationen protokolliert werden?
Wenn Sie keine relevantere Protokollierung finden können, ist das ganz normal, weil der Logger ein NullLogger ist, der nichts protokolliert. Könntest du die Laufzeiteigenschaft org.apache.poi.util.POILogger=org.apache.poi.util.SystemOutLogger
setzen (zum Beispiel, indem du Java mit dem Kommandozeilenargument -Dorg.apache.poi.util.POILogger=org.apache.poi.util.SystemOutLogger
startest) und siehst, ob dies mehr Protokollierung erzeugt?
Bei mir scheint dies auf eine Zeitüberschreitung in AWS zurückzuführen zu sein, die den Ausgabestrom geschlossen hat. Die Fehlermeldung ist nicht hilfreich und irreführend. Das ist das Beste, was ich bisher aus verfügbaren Informationen herausholen konnte.
Ich bekam einen ähnlichen Fehler, wenn die Datei, die zum Erstellen des Ausgabestroms verwendet wurde, bereits Daten enthielt. Wenn Sie Daten an die Datei anhängen möchten, müssen Sie dies im Datei-Ausgabestream-Objekt angeben:
%Vor% Wenn Sie dies tun, sollte wb.write(out)
wie erwartet funktionieren.
Sie müssen nach dem Erstellen aller Zellen einen Ausgabestream erstellen und diese dann in die Datei schreiben. Siehe die Codes in Details.
Tags und Links java excel apache-poi jsoup