2017-08-14 133 views
0

我需要在java中创建包含图表的Microsoft Word文档。我正在尝试Apache POI,但还没有找到办法做到这一点。有没有例子说明如何做到这一点?在apache poi中创建图表

+0

'HSSF'(用于XLS)或'XSSF'(对于XLSX)? – Gagravarr

+0

适用于Microsoft Word等DOCX – valanto

回答

0

您可以使用Temp Ms-Word文件创建图表。 只需在Temp Ms-Word文件中创建图表,然后使用自定义POI jar并将其写回您的实际Ms字文件 https://github.com/sandeeptiwari32/POI_ENHN/blob/master/POI3.14.jar。 您可以在官方POI版本得到这个代码4.0

代码示例:

import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 

import org.apache.poi.POIXMLDocumentPart; 
import org.apache.poi.openxml4j.exceptions.InvalidFormatException; 
import org.apache.poi.xwpf.usermodel.XWPFChart; 
import org.apache.poi.xwpf.usermodel.XWPFDocument; 
import org.openxmlformats.schemas.drawingml.x2006.chart.CTChart; 
import org.openxmlformats.schemas.drawingml.x2006.chart.CTTitle; 
import org.openxmlformats.schemas.drawingml.x2006.chart.CTTx; 
import org.openxmlformats.schemas.drawingml.x2006.main.CTRegularTextRun; 
import org.openxmlformats.schemas.drawingml.x2006.main.CTTextBody; 
import org.openxmlformats.schemas.drawingml.x2006.main.CTTextParagraph; 

public class TestXWPFChart { 

    public static void main(String[] args) throws Exception { 
FileInputStream inpuFile=new FileInputStream("input.docx"); 
     FileOutputStream outFile = new FileOutputStream("output.docx"); 
     @SuppressWarnings("resource") 
     XWPFDocument document = new XWPFDocument(inpuFile); 
     XWPFChart chart=null; 
     for (POIXMLDocumentPart part : document.getRelations()) { 
      if (part instanceof XWPFChart) { 
       chart = (XWPFChart) part; 
       break; 
      } 
     } 
     //change chart title from "Chart Title" to XWPF CHART 
     CTChart ctChart = chart.getCTChart(); 
     CTTitle title = ctChart.getTitle(); 
     CTTx tx = title.addNewTx(); 
     CTTextBody rich = tx.addNewRich(); 
     rich.addNewBodyPr(); 
     rich.addNewLstStyle(); 
     CTTextParagraph p = rich.addNewP(); 
     CTRegularTextRun r = p.addNewR(); 
     r.addNewRPr(); 
     r.setT("XWPF CHART"); 

     //write modified chart in output docx file 
     document.write(outFile); 
} 
}