1

raymond camden으로 자습서를 읽고 시험해보고 Office 문서를 읽고 cfm 페이지에 표시하십시오. 이 튜토리얼은 몇 년 전부터 사용 되었기 때문에 docx, pptx, xlsx 등 새로운 문서 대신 doc, ppt 및 xls 만 읽을 수있었습니다. 파일을 어떻게 성공적으로 읽어야합니까? Apache POI에서는 파일 확장자의 이름을 바꾸는 기능이 작동하지 않습니다.Office 문서 (docx, xlsx, pptx 등)를 읽고 cfm ColdFusion에 표시하는 방법?

내 코드 :

Object instantiation exception. 

An exception occurred while instantiating a Java object. The class must not be an interface or an abstract class. Error: ''. 

The error occurred in C:/ColdFusion11/cfusion/wwwroot/TicketOnThePlane/test.cfm: line 66 
64 : <cfcase value="ppt,pptx"> 
65 : <cfset finalfile = Replace(theFile, listLast(name,"."), "ppt")> 
66 : <cfset ppt = ppt.init(finalfile)> 
67 : <cfset pptext = pptext.init(ppt)> 
68 : <cfoutput> 
+1

''(https://wikidocs.adobe.com/wiki/display/coldfusionen/cfpresentation)을 사용해 보셨습니까? –

+0

가장 최근의 POI가 맞습니까? –

답변

2

만 바이너리 사무실 용으로 설계되어 사용하는 클래스, 즉 오피스 97-2003을 파일 :

<!--- where the poi files are ---> 
<cfset jarpath = expandPath("./jars")> 
<cfset paths = []> 
<cfdirectory action="list" name="files" directory="#jarpath#" filter="*.jar" recurse="true"> 

<cfloop query="files"> 
<cfset arrayAppend(paths, directory & "/" & name)> 
</cfloop> 

<!--- load javaloader ---> 
<cfset variables.loader = createObject("component", "javaloader.JavaLoader").init(paths)> 

<!--- generic file reader doohicky ---> 
<cfset myfile = createObject("java","java.io.FileInputStream")> 

<!--- get our required things loaded ---> 

<!--- Word ---> 
<cfset doc = loader.create("org.apache.poi.hwpf.HWPFDocument")> 
<cfset wordext = loader.create("org.apache.poi.hwpf.extractor.WordExtractor")> 

<!--- Excel ---> 
<cfset excel = loader.create("org.apache.poi.hssf.usermodel.HSSFWorkbook")> 
<cfset xlsext = loader.create("org.apache.poi.hssf.extractor.ExcelExtractor")> 

<!--- Powerpoint ---> 
<cfset ppt = loader.create("org.apache.poi.hslf.HSLFSlideShow")> 
<cfset pptext = loader.create("org.apache.poi.hslf.extractor.PowerPointExtractor")> 

<!--- get files ---> 
<cfset filePath = expandPath("./testdocs")> 
<cfdirectory action="list" name="files" directory="#filePath#"> 

<cfoutput query="files"> 
<cfset theFile = filePath & "/" & name> 
<cfset myfile.init(theFile)> 

Reading: #theFile#<br/> 

<cfswitch expression="#listLast(name,".")#"> 

<cfcase value="doc,docx"> 
<cfset finalfile = Replace(theFile, listLast(name,"."), "doc")> 
<cfset doc = doc.init(finalfile)> 
<cfset wordext.init(doc)> 
<cfoutput> 
<pre> 
#wordext.getText()# 
</pre> 
</cfoutput> 
</cfcase> 

<cfcase value="xls,xlsx"> 
<cfset finalfile = Replace(theFile, listLast(name,"."), "xls")> 
<cfset excel = excel.init(finalfile)> 
<cfset xlsext = xlsext.init(excel)> 
<cfoutput> 
<pre> 
#xlsext.getText()# 
</pre> 
</cfoutput> 
</cfcase> 

<cfcase value="ppt,pptx"> 
<cfset finalfile = Replace(theFile, listLast(name,"."), "ppt")> 
<cfset ppt = ppt.init(finalfile)> 
<cfset pptext = pptext.init(ppt)> 
<cfoutput> 
<pre> 
#pptext.getText(true,true)# 
</pre> 
</cfoutput> 
</cfcase> 
</cfswitch> 

<p><hr/></p> 

</cfoutput> 

다음은 간단한 오류의 설명이다. 파일 형식을 실제로 변경하지 않기 때문에 파일 확장명을 변경하면 작동하지 않습니다. 그들은 여전히 ​​내부적으로 ooxml 파일입니다.

다른 파일 형식 (및 이진 형식과 ooxml 형식 모두)에서 텍스트를 추출하려면 ExtractorFactory을 사용하십시오. 지정된 파일에 대해 올바른 추출기를 자동으로 결정합니다 (지원되는 경우). 게시 한 링크의 끝에 how to use the ExtractorFactory을 보여주는 또 다른 항목이 있습니다.

NB :

다음은 간단한 오류의 설명은 다음과 같습니다 :이 OOXML POI jars

.... 
loader = createObject("component", "javaloader.JavaLoader").init(paths); 
extractorFactory = loader.create("org.apache.poi.extractor.ExtractorFactory"); 
pathToFile = "c:/path/to/someFile.xlsx"; 
myfile = createObject("java","java.io.File").init(pathToFile); 
extractor = extractorFactory.createExtractor(myFile); 
WriteDump(extractor.getText()); 

편집 필요 자바 객체를 사용하는 경우,

사이드 메모를, 오류 메시지 텍스트는 일반적으로 어떻게 당신이 상용구 메시지. 스택 추적을보고 오류의 "원인"을 확인해야합니다.

+0

안녕하세요,이 오류가 발생했습니다. "java.lang.NoClassDefFoundError 유형의 객체를 캐스팅하는 중 오류가 호환되지 않는 유형의 java.lang.Exception으로 캐스팅 될 수 없습니다. 일반적으로 Java에서 프로그래밍 오류를 나타냅니다. 또한 당신이 의도 한 것과는 다른 방식으로 이물을 사용하려고 시도했을 수도 있습니다. "이제 poi-ooxml-3.9.jar를 사용하고 있습니다. 너 내가 뭘 잘못했는지 좀 봐주실 수 있겠 니? –