1

Excelファイルからデータを抽出するためにPOIを使用しています。(Excelシートの5番目の列には、ファイルシステムに存在するファイルの名前が含まれています)テーブルの行をループし(セルのコンテンツをPOIで抽出します)、行ごとにTikaのインスタンスを作成し、 Tika "parseToString(file)"の5番目の列、ファイルがOfficeドキュメント(excel、ppt、word)の場合、次のエラーが発生します。

Exception in thread "AWT-EventQueue-0" java.lang.NoSuchFieldError: filesystem
    at org.apache.poi.hwpf.HWPFDocument.<init>(HWPFDocument.java:185)
    at org.apache.poi.hwpf.HWPFDocument.<init>(HWPFDocument.java:131)
    at org.apache.tika.parser.microsoft.WordExtractor.parse(WordExtractor.java:61)
    at org.apache.tika.parser.microsoft.OfficeParser.parse(OfficeParser.java:182)
    at org.apache.tika.parser.CompositeParser.parse(CompositeParser.java:197)
    at org.apache.tika.parser.CompositeParser.parse(CompositeParser.java:197)
    at org.apache.tika.parser.AutoDetectParser.parse(AutoDetectParser.java:135)
    at org.apache.tika.Tika.parseToString(Tika.java:357)
    at org.apache.tika.Tika.parseToString(Tika.java:423)
    at org.apache.tika.Tika.parseToString(Tika.java:403)
    at HP.BuildMailExcelDoc.getTextFromTika(BuildMailExcelDoc.java:355)
    at HP.BuildMailExcelDoc.addExcelDoc(BuildMailExcelDoc.java:314)
    at HP.BuildMailExcelDoc.buildDoc(BuildMailExcelDoc.java:196)
    at HP.BuildMailExcelDoc.buildMailDoc(BuildMailExcelDoc.java:102)
    at HP.BuildMailExcelDoc.indexDirectory(BuildMailExcelDoc.java:69)
    at HP.BuildMailExcelDoc.indexDirectory(BuildMailExcelDoc.java:78)
    at HP.BuildMailExcelDoc.buildDoc(BuildMailExcelDoc.java:63)
    at HP.IndexGUI$1.mouseClicked(IndexGUI.java:281)
    at java.awt.AWTEventMulticaster.mouseClicked(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)

この問題は、POIでのネストされた使用の結果として発生すると思います。一度Excelテーブルに入れてから、もう一度Tika解析呼び出しに入れます。

合理的に聞こえますか?この問題をどのように処理できますか?

ありがとう:-)Reuth

4

1 に答える 1

5

クラスパスにPOIのコピーが2つあるようです。ティカが提供した新しいバージョンと古いバージョンがあると思います。問題は、Javaがクラスパスの最初のバージョン(古いバージョン)を取得していることです。

解決策は、クラスパスから古いバージョンを削除することです。古いコピーがどこから来たのかを特定する方法については、このPOIFAQエントリを参照してください

于 2011-09-07T14:13:02.727 に答える