Ich arbeite an einem Projekt, das eine Excel-Arbeitsmappe lesen, die erforderlichen Webdienste aufrufen, die Antwort von den Webdiensten übernehmen und diese Informationen in dieselbe Excel-Arbeitsmappe eingeben muss, die gelesen wurde.
Hier ist der Fehler, den ich sehe, wenn ich versuche, in die Excel-Arbeitsmappe zu schreiben:
%Vor%Hier ist mein Code für das Öffnen der Datei / Lesen:
%Vor%Danach lese ich jede Zeile und extrahiere jeden Zellenwert.
Sobald dies erledigt ist, erstelle ich die Zellen unter den Kopfzeilen für Success und Result Message und mache dann folgendes:
%Vor%Hat jemand zu einem ähnlichen Problem gerannt?
Das aktuelle Problem ist ein Fehler, der seit 2010 existiert und gefunden werden kann Ссылка
In der Stackoverflow-Liste unten wurde eine Problemumgehung gefunden. Wenn Sie das Buch schließen und erneut öffnen, bevor Sie ein weiteres Schreiben in die Datei ausführen, funktioniert es ohne Probleme. Dies ist auf keinen Fall effizient, aber es behebt das Problem, bis das Apache-POI-Entwicklerteam das Problem herausgefunden hat.
Ich habe dieselbe Fehlermeldung erhalten, aber verschiedene Klassen verwendet. Aktuelle Poi-Version, die ich verwende, ist Poi-ooxml 3.9, aber es hat immer noch das Problem. Jetzt habe ich mein Problem behoben und ich denke, dieses Problem tritt auf, wenn Sie zuerst die Arbeitsmappen-Instanz erhalten.
Wenn ich Daten in die Datei schreibe, gefällt mir das (mit Übungsregeln für Ausnahmen und Schließen):
%Vor%Ich habe die Fehlermeldung "Kann den Eingangsstrom von /docProps/app.xml nicht erhalten, wenn ich eine Arbeitsmappeinstanz wie folgt erhalten habe:
%Vor%Als ich das Problem behoben habe, war der modifizierte Code
%Vor%In meinem Fall ist es egal, ob Sie die gleiche Datei öffnen, lesen und in dieselbe Datei schreiben oder aus einer Datei lesen und dann in eine andere schreiben. Wenn Sie die Poi-Quellcodes lesen, könnten Sie sehen, dass die Factory-Methoden, die ich verwendet habe, open () -Methoden in der OPCPackage-Klasse aufrufen. Versuchen Sie es mit der Methode InputStream als Argument zu erhalten.
Ich denke, das Problem hier ist, dass Sie denselben filePath xslFile
für verwenden
Öffnen und Speichern der Datei.
Öffnen der Datei,
%Vor%Speichern der Datei,
%Vor%Sie benötigen einen InputStream zum Lesen und Arbeiten mit Ihrer Datei, aber dies Der Stream wird unzugänglich, wenn Sie einen erstellen OutputStream unter dem gleichen Pfad und Dateinamen.
Die Lösung, die ich dafür gefunden habe und nach der ich schon eine Weile gesucht habe, ist, dass du deine Workbook
nicht mit der File
öffnest, mit der du FileOutputStream
öffnest Speichere die Workbook
. Verwenden Sie stattdessen FileInputStream
, um Workbook
zu öffnen.
So etwas funktioniert einwandfrei
%Vor% Vergessen Sie nicht, jeden geöffneten Stream und das OPCPackage
zu schließen.
Hier ist, wie dies durchgeführt werden kann, wenn OPCPackage zum Lesen verwendet wird (try / catch / abschließend zur Lesbarkeit ausgelassen):
%Vor%%Vor%mach deine Modifikationen ... XSSFSheet sheet = wb.getSheetAt (0); ...
Der obige Kommentar von Jayamohan hat mir geholfen, dieses Problem heute zu lösen (mit verschiedenen Dateipfaden für Input und Output). Danke!
Tags und Links java apache-poi excel-2010