【POI word】使用POI实现对Word的读取以及生成
生活随笔
收集整理的這篇文章主要介紹了
【POI word】使用POI实现对Word的读取以及生成
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
項(xiàng)目結(jié)構(gòu)如下:
?
那第一部分:先是讀取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在讀寫(xiě)word docx文件時(shí)是通過(guò)xwpf模塊來(lái)進(jìn)行的,其核心是XWPFDocument。一個(gè)XWPFDocument代表一個(gè)docx文檔,其可以用來(lái)讀docx文檔,也可以用來(lái)寫(xiě)docx文檔。 26 *XWPFDocument中主要包含下面這幾種對(duì)象: 27 *XWPFParagraph:代表一個(gè)段落。 28 *XWPFRun:代表具有相同屬性的一段文本。 29 *XWPFTable:代表一個(gè)表格。 30 *XWPFTableRow:表格的一行。 31 *XWPFTableCell:表格對(duì)應(yīng)的一個(gè)單元格。 32 */ 33 public class ReadWord { 34 35 /** 36 * 通過(guò)XWPFWordExtractor讀取word文檔 37 * 只能獲取到文本,不能獲取到文本對(duì)應(yīng)的屬性值 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 //將讀取到文檔中的文本信息,存放在一個(gè)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 //打印創(chuàng)建者信息 55 System.out.println(coreP.getCreator()); 56 //打印創(chuàng)建時(shí)間 57 System.out.println(coreP.getCreated()); 58 //打印標(biāo)題 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 * 通過(guò)XWPFDocument讀取word文檔 71 * 通過(guò)XWPFDocument讀取docx文檔時(shí),我們就可以獲取到文本比較精確的屬性信息了。比如我們可以獲取到某一個(gè)XWPFParagraph、XWPFRun或者是某一個(gè)XWPFTable,包括它們對(duì)應(yīng)的屬性信息 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 //獲取當(dāng)前段落的屬性 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 //獲取表格相對(duì)應(yīng)的行 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("消耗時(shí)間:"+(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 } View Code在讀取到word的附屬信息,會(huì)在控制臺(tái)打印如下:
?
第二部分:生成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 //創(chuàng)建一個(gè)word文檔 28 XWPFDocument xwpfDocument = new XWPFDocument(); 29 FileOutputStream outputStream = new FileOutputStream("F:/test/word1.docx"); 30 /** 31 * 創(chuàng)建一個(gè)段落 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 * 創(chuàng)建一個(gè)table 46 */ 47 //創(chuàng)建一個(gè)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 //設(shè)置表格的寬度大小 58 tableWidth.setW(BigInteger.valueOf(8000)); 59 60 /** 61 * 獲取表格中的行 以及設(shè)計(jì)行樣式 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 * 獲取表格中的列 以及設(shè)計(jì)列樣式 76 */ 77 //獲取某個(gè)單元格 78 XWPFTableCell cell ; 79 cell = row.getCell(0); 80 cell.setText("第一行\(zhòng)r\n第一列"); 81 //單元格背景顏色 82 cell.setColor("676767"); 83 //獲取單元格樣式 84 CTTcPr cellPr = cell.getCTTc().addNewTcPr(); 85 //表格內(nèi)容垂直居中 86 cellPr.addNewVAlign().setVal(STVerticalJc.CENTER); 87 //設(shè)置單元格的寬度 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 } View Code生成word如下:
?
唯一的感覺(jué)就是 功能實(shí)現(xiàn)的太簡(jiǎn)單,沒(méi)有涉及到核心的部分,感覺(jué) 不美麗!!!
?
總結(jié)
以上是生活随笔為你收集整理的【POI word】使用POI实现对Word的读取以及生成的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: PHP Module
- 下一篇: 将RGB转换成ToWin32值