2012-11-19 52 views
0

首先我覺得它不是很容易使用Apache POI API,就像其他任何java API一樣,因爲我很困惑,它們都是需要的jar文件爲此,我正在使用poi-scratchpad-3.1-beta1.jar和poi-3.2-FINAL-20081019.jar(HWPFDocument類)修改docx內容的情況,但在某些論壇中,它指向一些其他poi jar文件的不同名稱與不同的版本...(指示使用類XSSFDocument)。使用apache poi替換microsoft 2007(HWPFDocument)文檔的內容需要幫助

我的要求是用一些文件內容替換一些文本。 爲此,我使用下面的代碼來替換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(); 
     } 

    } 
} 

所以......

  • 有誰知道爲什麼兩個獨立的jar文件需要
  • 我能做些什麼使我的工作,任何機構?

回答

2

HWPF適用於基於OLE2的舊版.doc文件。如果您想使用新的OOXML .docx文件,則需要使用XWPF。

接下來,您正在使用POI的舊版本,並且在該版本中存在不匹配的問題。你應該確保你使用的是最新版本,並確保所有的POI罐子都來自同一個版本。要計算出您需要的罐,以及它們的依賴關係,請參見component overview page以瞭解詳細信息。

+1

@sam:請不要通過*編輯帖子回覆帖子*。當你有一個特別的新問題時,請隨時提出一個新問題。[*問*](http://stackoverflow.com/questions/ask「問問題」)。 –