如何使用 Poi 读取 doc 文件?
How to read doc file using Poi?
我正在尝试在我的编辑器窗格中查看 word 文件
我尝试了这些行
import java.awt.Dimension;
import java.awt.GridLayout;
import java.io.File;
import java.io.FileInputStream;
import javax.swing.JEditorPane;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.extractor.WordExtractor;
public class editorpane extends JEditorPane
{
public editorpane(File file)
{
try
{
FileInputStream fis = new FileInputStream(file.getAbsolutePath());
HWPFDocument hwpfd = new HWPFDocument(fis);
WordExtractor we = new WordExtractor(hwpfd);
String[] array = we.getParagraphText();
for (int i = 0; i < array.length; i++)
{
this.setPage(array[i]);
}
} catch (Exception e)
{
e.printStackTrace();
}
但给了我
org.apache.poi.poifs.filesystem.OfficeXmlFileException: The supplied data appears to be in the Office 2007+ XML. You are calling the part of POI that deals with OLE2 Office Documents. You need to call a different part of POI to process this data (eg XSSF instead of HSSF)
at org.apache.poi.poifs.storage.HeaderBlock.<init>(HeaderBlock.java:131)
at org.apache.poi.poifs.storage.HeaderBlock.<init>(HeaderBlock.java:104)
at org.apache.poi.poifs.filesystem.POIFSFileSystem.<init>(POIFSFileSystem.java:138)
at org.apache.poi.hwpf.HWPFDocumentCore.verifyAndBuildPOIFS(HWPFDocumentCore.java:106)
at org.apache.poi.hwpf.HWPFDocument.<init>(HWPFDocument.java:174)
at frame1.editorpane.<init>(editorpane.java:24)
这一行
HWPFDocument hwpfd = new HWPFDocument(fis);
我该如何解决??
此外我不确定这些行
for (int i = 0; i < array.length; i++)
{
this.setPage(array[i]);
}
我可以确认一下吗??
您正在尝试使用 .doc (HWPF) 文件的代码打开 .docx 文件 (XWPF)。您可以对 .docx 文件使用 XWPFWordExtractor
。
有一个 ExtractorFactory
,您可以使用它来让 POI 决定其中哪些适用,并使用正确的 class 打开文件,但是您不能按页面迭代,因为只有然后可以使用通用 getText()
方法。
这样使用
POITextExtractor extractor = ExtractorFactory.createExtractor(file);
extractor.getText();
我正在尝试在我的编辑器窗格中查看 word 文件 我尝试了这些行
import java.awt.Dimension;
import java.awt.GridLayout;
import java.io.File;
import java.io.FileInputStream;
import javax.swing.JEditorPane;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.extractor.WordExtractor;
public class editorpane extends JEditorPane
{
public editorpane(File file)
{
try
{
FileInputStream fis = new FileInputStream(file.getAbsolutePath());
HWPFDocument hwpfd = new HWPFDocument(fis);
WordExtractor we = new WordExtractor(hwpfd);
String[] array = we.getParagraphText();
for (int i = 0; i < array.length; i++)
{
this.setPage(array[i]);
}
} catch (Exception e)
{
e.printStackTrace();
}
但给了我
org.apache.poi.poifs.filesystem.OfficeXmlFileException: The supplied data appears to be in the Office 2007+ XML. You are calling the part of POI that deals with OLE2 Office Documents. You need to call a different part of POI to process this data (eg XSSF instead of HSSF)
at org.apache.poi.poifs.storage.HeaderBlock.<init>(HeaderBlock.java:131)
at org.apache.poi.poifs.storage.HeaderBlock.<init>(HeaderBlock.java:104)
at org.apache.poi.poifs.filesystem.POIFSFileSystem.<init>(POIFSFileSystem.java:138)
at org.apache.poi.hwpf.HWPFDocumentCore.verifyAndBuildPOIFS(HWPFDocumentCore.java:106)
at org.apache.poi.hwpf.HWPFDocument.<init>(HWPFDocument.java:174)
at frame1.editorpane.<init>(editorpane.java:24)
这一行
HWPFDocument hwpfd = new HWPFDocument(fis);
我该如何解决??
此外我不确定这些行
for (int i = 0; i < array.length; i++)
{
this.setPage(array[i]);
}
我可以确认一下吗??
您正在尝试使用 .doc (HWPF) 文件的代码打开 .docx 文件 (XWPF)。您可以对 .docx 文件使用 XWPFWordExtractor
。
有一个 ExtractorFactory
,您可以使用它来让 POI 决定其中哪些适用,并使用正确的 class 打开文件,但是您不能按页面迭代,因为只有然后可以使用通用 getText()
方法。
这样使用
POITextExtractor extractor = ExtractorFactory.createExtractor(file);
extractor.getText();