Frage

Ich bin derzeit mit POI, zu versuchen, Text aus einer Charge von Word-Dokumenten zu extrahieren, und ich muss in der Lage sein zu bestimmen, welche Einträge ein Dokument enthält. Ich habe in der Lage gewesen, so weit wie das Ziehen des Document-Root und ziehen Sie den ersten Eintrag zu bekommen, aber ich möchte in der Lage, alle Einträge anzuzeigen. Die getEntries() Methode scheint diese Funktionalität zu bieten, aber ich bin ratlos, wie getViewableIterator() zu verwenden, um sie herauszuziehen.

Im Folgenden finden Sie, was ich habe Code-weise:

<cfset myFile = createObject("java", "java.io.FileInputStream").init(fileInputPath)>
<cfset fileSystem = CreateObject( "java", "org.apache.poi.poifs.filesystem.POIFSFileSystem" ).Init(myFile)>

<cfloop from="1" to="#fileSystem.getRoot().getEntryCount()#" index="i">
     <cfset viewableIterator = fileSystem.getRoot().getEntries().next().getViewableIterator()>
     <cfset nextEntry = fileSystem.getRoot().getEntries().next()>
     <cfif viewableIterator.hasNext()>
         <cfdump var="#nextEntry.getShortDescription()#">
         <cfset viewableIterator.remove()>
     </cfif>
</cfloop>

Auf der ersten Schleife, ich bin in der Lage den ersten Eintrag bekommen gut. Allerdings bekomme ich einen java.lang.IllegalStateException Fehler, sobald remove() ausgeführt wird. Offensichtlich bin ich nicht mit der remove() Methode richtig, aber ich habe keine Ergebnisse Beispiele zu finden, wie dies sollte richtig verwendet werden. Jede Hilfe wäre sehr geschätzt.

War es hilfreich?

Lösung

Das verstehe ich nicht wirklich Ihre XML-Tags (in der Regel verwende ich Java in seiner normalen Form, mit geschweiften Klammern und Sachen), aber in der Regel ein Java Iterator funktioniert wie folgt:

while(iterator.hasNext()) {
  x = iterator.next(); // get element
  // do with x what you want
  if (/*you want to remove x from the underlying list*/)
      iterator.remove();
}

In der Praxis entfernen, ist nur sehr selten verwendet, in Fällen Sie durch eine Sammlung gehen wollen, und entfernen Sie alles, was Sie in es länger nicht benötigen. entfernen kann fehlschlagen, wenn die collecion ist nur lesbar oder wenn Sie über sie zweimal mit zwei verschiedenen Iteratoren zur gleichen Zeit zu wiederholen versuchen. Just-Stick mit hasNext und weiter.

Andere Tipps

Ben Nadel von Kinky-Lösungen Ruhm hat eine Komponente, die Ihre Situation umgehen könnte. Geben Sie einen Blick sehen und berichten, wenn sein Projekt, das Sie geholfen.

POI-Dienstprogramm Coldfusion-Komponenten

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top