문제

현재 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만 사용하세요.

다른 팁

Kinky Solutions의 Ben Nadel은 귀하의 상황을 처리할 수 있는 구성 요소를 작성했습니다.그의 프로젝트가 도움이 되었는지 살펴보고 다시 보고해 주세요.

POI 유틸리티 ColdFusion 구성 요소

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top