我目前使用POI试图提取文本了一批Word文档中,我需要能够确定哪些条目文档中包含。我已经能够尽量得到的拉文档根目录和拉动中的第一项,但我希望能够查看所有条目。该getEntries()方法似乎提供这个功能,但我在一个不知如何使用getViewableIterator()拉出来。

下面是我的代码明智的:

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

在第一循环中,我能够获得的第一项就好了。但是,我只要执行java.lang.IllegalStateException得到remove()错误。很显然,我没有正确使用方法remove(),但我一直没能找到这个应该怎么正确使用任何例子。任何帮助,将不胜感激。

有帮助吗?

解决方案

我真的不明白你的XML标记(我通常使用Java以正常形式,用花括号和东西),但一般一个Java迭代器的工作原理如下所示:

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

在实践中,取出只使用很少,在情况下,你想通过收集和删除一切你不需要任何再在里面。删除如果的收集是只读的,或者如果你想在同一时间两个不同的迭代器遍历两次可能会失败。只要坚持hasNext和next。

其他提示

淫解决方案成名奔纳德尔写道,可能会处理你的情况的组件。给看看看,并报告回来,如果他的项目帮助你。

POI实用ColdFusion组件

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top