項目結構如下:

那第一部分:先是讀取Word文檔
1 package com.it.WordTest; 2 3 import java.io.FileInputStream; 4 import java.io.FileNotFoundException; 5 import java.io.FileOutputStream; 6 import java.io.FileWriter; 7 import java.io.IOException; 8 import java.io.Writer; 9 import java.util.Date; 10 import java.util.List; 11 12 import org.apache.poi.POIXMLProperties.CoreProperties; 13 import org.apache.poi.xwpf.extractor.XWPFWordExtractor; 14 import org.apache.poi.xwpf.usermodel.XWPFDocument; 15 import org.apache.poi.xwpf.usermodel.XWPFParagraph; 16 import org.apache.poi.xwpf.usermodel.XWPFTable; 17 import org.apache.poi.xwpf.usermodel.XWPFTableCell; 18 import org.apache.poi.xwpf.usermodel.XWPFTableRow; 19 import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPPr; 20 import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblPr; 21 22 /** 23 * 讀取docx文件 24 * @author Administrator 25 *POI在讀寫word docx文件時是通過xwpf模塊來進行的,其核心是XWPFDocument。一個XWPFDocument代表一個docx文檔,其可以用來讀docx文檔,也可以用來寫docx文檔。 26 *XWPFDocument中主要包含下面這幾種對象: 27 *XWPFParagraph:代表一個段落。 28 *XWPFRun:代表具有相同屬性的一段文本。 29 *XWPFTable:代表一個表格。 30 *XWPFTableRow:表格的一行。 31 *XWPFTableCell:表格對應的一個單元格。 32 */ 33 public class ReadWord { 34 35 /** 36 * 通過XWPFWordExtractor讀取word文檔 37 * 只能獲取到文本,不能獲取到文本對應的屬性值 38 */ 39 public static void readByXWPFWordExtractor(){ 40 try { 41 FileInputStream input = new FileInputStream("f:/test/肥胖早知道模板.docx"); 42 XWPFDocument doc = new XWPFDocument(input); 43 XWPFWordExtractor docE = new XWPFWordExtractor(doc); 44 String text = docE.getText(); 45 //將讀取到文檔中的文本信息,存放在一個txt文件中 46 FileWriter write = new FileWriter("f:/test/肥胖早知道的文本信息.txt"); 47 write.write(text); 48 write.close(); 49 50 //獲取文檔的附屬信息 51 CoreProperties coreP = docE.getCoreProperties(); 52 //打印文檔的分類信息 53 System.out.println(coreP.getCategory()); 54 //打印創建者信息 55 System.out.println(coreP.getCreator()); 56 //打印創建時間 57 System.out.println(coreP.getCreated()); 58 //打印標題 59 System.out.println(coreP.getTitle()); 60 61 input.close(); 62 } catch (FileNotFoundException e) { 63 e.printStackTrace(); 64 } catch (IOException e) { 65 e.printStackTrace(); 66 } 67 } 68 69 /** 70 * 通過XWPFDocument讀取word文檔 71 * 通過XWPFDocument讀取docx文檔時,我們就可以獲取到文本比較精確的屬性信息了。比如我們可以獲取到某一個XWPFParagraph、XWPFRun或者是某一個XWPFTable,包括它們對應的屬性信息 72 */ 73 public static void readByXWPFDocument(){ 74 Date data = new Date(); 75 try { 76 FileInputStream inputStream = new FileInputStream("f:/test/肥胖早知道模板.docx"); 77 XWPFDocument doc =new XWPFDocument(inputStream); 78 //獲取所有段落 79 List<XWPFParagraph> list = doc.getParagraphs(); 80 FileWriter writer = new FileWriter("f:/test/肥胖早知道 帶屬性.txt"); 81 StringBuffer str = new StringBuffer(); 82 for (XWPFParagraph xwpfParagraph : list) { 83 //獲取當前段落的屬性 84 CTPPr CPPR = xwpfParagraph.getCTP().getPPr(); 85 str.append(xwpfParagraph.getText()); 86 } 87 writer.write(str.toString()); 88 89 //獲取多有table 90 List<XWPFTable> tableList = doc.getTables(); 91 List<XWPFTableRow> rowList; 92 List<XWPFTableCell> cellList; 93 StringBuilder build = new StringBuilder(); 94 for (XWPFTable xwpfTable : tableList) { 95 //獲取表格信息 96 CTTblPr tablePer = xwpfTable.getCTTbl().getTblPr(); 97 //獲取表格相對應的行 98 rowList =xwpfTable.getRows(); 99 for (XWPFTableRow xwpfTableRow : rowList) { 100 cellList = xwpfTableRow.getTableCells(); 101 for (XWPFTableCell xwpfTableCell : cellList) { 102 build.append("【單元格信息】:"+xwpfTableCell.getText()+"\r\n"); 103 } 104 } 105 } 106 writer.append(build); 107 writer.close(); 108 109 110 inputStream.close(); 111 112 Date date2 = new Date(); 113 System.out.println("消耗時間:"+(date2.getTime()-data.getTime())+"ms"); 114 } catch (FileNotFoundException e) { 115 e.printStackTrace(); 116 } catch (IOException e) { 117 e.printStackTrace(); 118 } 119 } 120 121 public static void main(String[] args) { 122 //readByXWPFWordExtractor(); 123 readByXWPFDocument(); 124 } 125 }
在讀取到word的附屬信息,會在控制台打印如下:

第二部分:生成Word
1 package com.it.WordTest; 2 3 import java.io.FileNotFoundException; 4 import java.io.FileOutputStream; 5 import java.io.IOException; 6 import java.math.BigInteger; 7 import java.util.List; 8 9 import org.apache.poi.xwpf.usermodel.XWPFDocument; 10 import org.apache.poi.xwpf.usermodel.XWPFParagraph; 11 import org.apache.poi.xwpf.usermodel.XWPFRun; 12 import org.apache.poi.xwpf.usermodel.XWPFTable; 13 import org.apache.poi.xwpf.usermodel.XWPFTableCell; 14 import org.apache.poi.xwpf.usermodel.XWPFTableRow; 15 import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPPr; 16 import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblPr; 17 import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblWidth; 18 import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr; 19 import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTrPr; 20 import org.openxmlformats.schemas.wordprocessingml.x2006.main.STVerticalJc; 21 22 public class WriteWord { 23 24 public static void writeXWPFDocument(){ 25 26 try { 27 //創建一個word文檔 28 XWPFDocument xwpfDocument = new XWPFDocument(); 29 FileOutputStream outputStream = new FileOutputStream("F:/test/word1.docx"); 30 /** 31 * 創建一個段落 32 */ 33 XWPFParagraph paragraph = xwpfDocument.createParagraph(); 34 XWPFRun run = paragraph.createRun(); 35 run.setText("德瑪西亞!!"); 36 //加粗 37 run.setBold(true); 38 39 run = paragraph.createRun(); 40 run.setText("艾歐尼亞"); 41 run.setColor("fff000"); 42 43 44 /** 45 * 創建一個table 46 */ 47 //創建一個10行10列的表格 48 XWPFTable table =xwpfDocument.createTable(10, 10); 49 //添加新的一列 50 table.addNewCol(); 51 //添加新的一行 52 table.createRow(); 53 //獲取表格屬性 54 CTTblPr tablePr = table.getCTTbl().addNewTblPr(); 55 //獲取表格寬度 56 CTTblWidth tableWidth = tablePr.addNewTblW(); 57 //設置表格的寬度大小 58 tableWidth.setW(BigInteger.valueOf(8000)); 59 60 /** 61 * 獲取表格中的行 以及設計行樣式 62 */ 63 //獲取表格中的所有行 64 List<XWPFTableRow> rowList = table.getRows(); 65 XWPFTableRow row; 66 row = rowList.get(0); 67 row.setHeight(2000); 68 //為這一行增加一列 69 row.addNewTableCell(); 70 //獲取行屬性 71 CTTrPr rowPr = row.getCtRow().addNewTrPr(); 72 row.getCtRow(); 73 74 /** 75 * 獲取表格中的列 以及設計列樣式 76 */ 77 //獲取某個單元格 78 XWPFTableCell cell ; 79 cell = row.getCell(0); 80 cell.setText("第一行\r\n第一列"); 81 //單元格背景顏色 82 cell.setColor("676767"); 83 //獲取單元格樣式 84 CTTcPr cellPr = cell.getCTTc().addNewTcPr(); 85 //表格內容垂直居中 86 cellPr.addNewVAlign().setVal(STVerticalJc.CENTER); 87 //設置單元格的寬度 88 cellPr.addNewTcW().setW(BigInteger.valueOf(5000)); 89 90 91 xwpfDocument.write(outputStream); 92 outputStream.close(); 93 94 } catch (FileNotFoundException e) { 95 e.printStackTrace(); 96 } catch (IOException e) { 97 e.printStackTrace(); 98 } 99 } 100 public static void main(String[] args) { 101 writeXWPFDocument(); 102 } 103 }
生成word如下:

唯一的感覺就是 功能實現的太簡單,沒有涉及到核心的部分,感覺 不美麗!!!
