Question

J'utilise actuellement POI pour tenter d'extraire le texte d'un lot de documents Word et je dois être en mesure de déterminer les entrées de document contient. Je suis en mesure d'aller aussi loin que tirer la racine du document et en tirant la première entrée mais je veux être en mesure d'afficher toutes les entrées. La méthode de getEntries() semble fournir cette fonctionnalité, mais je suis à une perte sur la façon d'utiliser getViewableIterator() pour les retirer.

Voici ce que j'ai-sage code:

<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>

Sur la première boucle, je suis en mesure d'obtenir la première entrée très bien. Cependant, je reçois une erreur de java.lang.IllegalStateException dès remove() est exécuté. Il est évident que je n'utilise pas correctement la méthode remove() mais je ne l'ai pas été en mesure de trouver des exemples de la façon dont cela devrait être correctement utilisé. Toute aide serait grandement appréciée.

Était-ce utile?

La solution

Je ne comprends pas vraiment vos balises XML (généralement j'utilise Java sous sa forme normale, avec des accolades et des choses), mais généralement un iterator Java fonctionne comme suit:

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();
}

Dans la pratique, éliminer n'est utilisé que très rarement, dans les cas que vous voulez passer par une collection et enlever tout ce que vous n'avez pas besoin plus en elle. supprimer peut échouer si le collecion est en lecture seule ou si vous essayez de parcourir deux fois avec deux itérateurs différents en même temps. Il suffit de coller avec hasNext et à côté.

Autres conseils

Ben Nadel de Solutions Kinky renommée a écrit un composant qui pourrait gérer votre situation. Donnez un look voir et de faire rapport si son projet vous a aidé.

POI Utilitaire ColdFusion Component

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top