【POI word】使用POI实现对Word的读取以及生成
项目结构如下:
那第一部分:先是读取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 }
View Code
在读取到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 }
View Code
生成word如下:
唯一的感觉就是 功能实现的太简单,没有涉及到核心的部分,感觉 不美丽!!!
【POI word】使用POI实现对Word的读取以及生成相关推荐
- java poi读取word中附件_java用poi实现对word读取和修改操作
java编程要实现对word的操作没有vb那种编程语言来得容易,得借助一些开源组件,其中就包括jacob.poi等, 而poi应用得最为广泛,对word2003和2007的读和写word操作都十分方便 ...
- java用poi实现对word读取和修改操作
java编程要实现对word的操作没有vb那种编程语言来得容易,得借助一些开源组件,其中就包括jacob.poi等, 而poi应用得最为广泛,对word2003和2007的读和写word操作都十分方便 ...
- python对word文档内容进行批量替换_python 使用win32com实现对word文档批量替换页眉页脚...
最近由于工作需要,需要将70个word文件的页眉页脚全部进行修改,在想到这个无聊/重复/没有任何技术含量的工作时,我的内心是相当奔溃的.就在我接近奔溃的时候我突然想到完全可以用python脚本来实现这 ...
- ## 以下代码主要实现对Word PPT等批量转换为 PDF
以下代码主要实现对Word PPT等批量转换为 PDF 可先百度查阅os库 import os import comtypes.clientdef get_path_word():pathpath = ...
- 随机数写excel java代码_基于python实现在excel中读取与生成随机数写入excel中
搜索热词 具体要求是:在一份已知的excel表格中读取学生的学号与姓名,再将这些数据放到新的excel表中的第一列与第二列,最后再生成随机数作为学生的考试成绩. 首先要用到的数据库有:xlwt,xlr ...
- C#实现对Word文件读写[转]
手头上的一个项目报表相对比较简单,所以报表打印采用VBA引擎,通过定制Word模版,然后根据模版需要填充数据,然后OK,打印即可. 实现方法:首先需要引用VBA组建,我用的是Office2003 Pr ...
- cubemx使用FATFS实现对U盘读取 --- STM32F407
说明:本文主要使用 USB的全速模式和FATFS实现对U盘的存储和读取.其中单片机作为主机,U盘为从机,需要为U盘进行供电. 1:cubemx配置: (1) 如果想要支持给USB供电,点击" ...
- POI操作Word组件haiwei-poi-word(模板+数据,简单几行代码就可以实现对word的输出)
目录 Why haiwei-poi-word 基本思想 开发方法论 术语 版本要求 快速入门 模板编写 组件能力 文本替换 最简单文本匹配 标签前后格式不同 文本中有标签 标签中不可有空格 文本框 表 ...
- php代码实现对word文件的查找与替换,ThinkPHP5使用phpword实现文件模板字符替换
PhpWord文档 想实现更多功能的朋友可以仔细参考文档 一.使用环境 目前是在ThinkPHP5.0.21中使用的PhpWord,其他使用环境引入方式可能会有一点不同. 使用composer安装,直 ...
最新文章
- 谁能解答我对知识图谱的上百个疑问?
- 救人一命是怎样的体验?
- 完胜 BERT,谷歌最佳 NLP 预训练模型开源
- Win10电脑开机界面设置个性签名?
- bat 快速切换路径
- Husband的忏悔书(IT攻城狮)
- il和idl区别_我来给普及一下matlab、IDL、fortran神马的区别吧
- ASM_PREFERRED_READ_FAILURE_GROUPS
- 致Python学习者,该跟大佬学习做项目了
- Elasticsearch与Solr比较
- git修改文件名大小写的方法。
- 【QT】QT从零入门教程(九):QT常用控件 [QSlider、QSpinBox、QComboBox、QRadioButton]
- 寒武纪“动荡”的 6 周年:CTO 梁军离职,市值蒸发 59 亿,核心技术人才仅剩 3 人
- exchange 2010 sp2系列之(二)证书配置
- 谈谈这一两年的成长 | 读研一年半,靠学习收入四十多万 !
- Spring8中lambda表达式的学习(Function接口、BiFunction接口、Consumer接口)
- 浙江计算机三级在线试题及答案,计算机三级试题及答案
- Mac iOS Simulator录制Gif图
- LaTex 在线编辑编译,生成PDF —— Overleaf
- 53.String的intern()方法、new String()到底创建了几个对象、intern()面试难题