首先我感觉它不是很容易使用Apache POI API,就像任何其他java API一样,因为我很困惑哪些是修改docx的内容所需的所有jar文件我使用的是poi-scratchpad- 3.1-beta1.jar和poi-3.2-FINAL-20081019.jar(HWPFDocument类)但在某些论坛中它指向其他一些poi jar文件的不同名称以及不同的版本......(表示使用类XSSFDocument)。
我的要求是用一些文件内容替换一些文本。 为此,我使用以下代码来替换microsoft 2007(docx文件)的内容。我最终得到了错误说..
org.apache.poi.poifs.filesystem.OfficeXmlFileException:提供的数据似乎位于Office 2007+ XML中。 POI仅支持OLE2 Office文档
import java.io.*;
import org.apache.poi.POIDocument;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.usermodel.CharacterRun;
import org.apache.poi.hwpf.usermodel.Range;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
public class GenerateTicket {
public static void main(String[] args) {
final String FILE_PATH = "/home/mateen/Desktop/Ticket.docx";
try {
File file = new File(FILE_PATH);
FileInputStream fis = new FileInputStream(file);
POIFSFileSystem poifs = new POIFSFileSystem(fis);
HWPFDocument doc = new HWPFDocument(poifs);
Range range = doc.getRange();
CharacterRun run = range.insertAfter("Hello POI CORE/HWPF !!!");
run.setBold(true);
run.setItalic(true);
doc.write(new FileOutputStream("/home/mateen/Desktop/FromTicket.Docx"));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
所以......
答案 0 :(得分:3)
HWPF适用于旧的基于OLE2的.doc文件。如果您想使用较新的OOXML .docx文件,则需要使用XWPF。
接下来,您使用的是旧版本的POI,并且使用了不匹配的POI。您应该确保使用的是最新版本,并确保所有POI罐都来自同一版本。要了解您想要的Jars以及它们具有的依赖关系,请参阅component overview page了解详细信息。