【POI word】使用POI实现对Word的读取以及生成
项目结构如下:

那第一部分:先是读取Word文档
package com.it.WordTest; import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.Date;
import java.util.List; import org.apache.poi.POIXMLProperties.CoreProperties;
import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPPr;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblPr; /**
* 读取docx文件
* @author Administrator
*POI在读写word docx文件时是通过xwpf模块来进行的,其核心是XWPFDocument。一个XWPFDocument代表一个docx文档,其可以用来读docx文档,也可以用来写docx文档。
*XWPFDocument中主要包含下面这几种对象:
*XWPFParagraph:代表一个段落。
*XWPFRun:代表具有相同属性的一段文本。
*XWPFTable:代表一个表格。
*XWPFTableRow:表格的一行。
*XWPFTableCell:表格对应的一个单元格。
*/
public class ReadWord { /**
* 通过XWPFWordExtractor读取word文档
* 只能获取到文本,不能获取到文本对应的属性值
*/
public static void readByXWPFWordExtractor(){
try {
FileInputStream input = new FileInputStream("f:/test/肥胖早知道模板.docx");
XWPFDocument doc = new XWPFDocument(input);
XWPFWordExtractor docE = new XWPFWordExtractor(doc);
String text = docE.getText();
//将读取到文档中的文本信息,存放在一个txt文件中
FileWriter write = new FileWriter("f:/test/肥胖早知道的文本信息.txt");
write.write(text);
write.close(); //获取文档的附属信息
CoreProperties coreP = docE.getCoreProperties();
//打印文档的分类信息
System.out.println(coreP.getCategory());
//打印创建者信息
System.out.println(coreP.getCreator());
//打印创建时间
System.out.println(coreP.getCreated());
//打印标题
System.out.println(coreP.getTitle()); input.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} /**
* 通过XWPFDocument读取word文档
* 通过XWPFDocument读取docx文档时,我们就可以获取到文本比较精确的属性信息了。比如我们可以获取到某一个XWPFParagraph、XWPFRun或者是某一个XWPFTable,包括它们对应的属性信息
*/
public static void readByXWPFDocument(){
Date data = new Date();
try {
FileInputStream inputStream = new FileInputStream("f:/test/肥胖早知道模板.docx");
XWPFDocument doc =new XWPFDocument(inputStream);
//获取所有段落
List<XWPFParagraph> list = doc.getParagraphs();
FileWriter writer = new FileWriter("f:/test/肥胖早知道 带属性.txt");
StringBuffer str = new StringBuffer();
for (XWPFParagraph xwpfParagraph : list) {
//获取当前段落的属性
CTPPr CPPR = xwpfParagraph.getCTP().getPPr();
str.append(xwpfParagraph.getText());
}
writer.write(str.toString()); //获取多有table
List<XWPFTable> tableList = doc.getTables();
List<XWPFTableRow> rowList;
List<XWPFTableCell> cellList;
StringBuilder build = new StringBuilder();
for (XWPFTable xwpfTable : tableList) {
//获取表格信息
CTTblPr tablePer = xwpfTable.getCTTbl().getTblPr();
//获取表格相对应的行
rowList =xwpfTable.getRows();
for (XWPFTableRow xwpfTableRow : rowList) {
cellList = xwpfTableRow.getTableCells();
for (XWPFTableCell xwpfTableCell : cellList) {
build.append("【单元格信息】:"+xwpfTableCell.getText()+"\r\n");
}
}
}
writer.append(build);
writer.close(); inputStream.close(); Date date2 = new Date();
System.out.println("消耗时间:"+(date2.getTime()-data.getTime())+"ms");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} public static void main(String[] args) {
//readByXWPFWordExtractor();
readByXWPFDocument();
}
}
在读取到word的附属信息,会在控制台打印如下:

第二部分:生成Word
package com.it.WordTest; import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.math.BigInteger;
import java.util.List; import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPPr;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblPr;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblWidth;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTrPr;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STVerticalJc; public class WriteWord { public static void writeXWPFDocument(){ try {
//创建一个word文档
XWPFDocument xwpfDocument = new XWPFDocument();
FileOutputStream outputStream = new FileOutputStream("F:/test/word1.docx");
/**
* 创建一个段落
*/
XWPFParagraph paragraph = xwpfDocument.createParagraph();
XWPFRun run = paragraph.createRun();
run.setText("德玛西亚!!");
//加粗
run.setBold(true); run = paragraph.createRun();
run.setText("艾欧尼亚");
run.setColor("fff000"); /**
* 创建一个table
*/
//创建一个10行10列的表格
XWPFTable table =xwpfDocument.createTable(10, 10);
//添加新的一列
table.addNewCol();
//添加新的一行
table.createRow();
//获取表格属性
CTTblPr tablePr = table.getCTTbl().addNewTblPr();
//获取表格宽度
CTTblWidth tableWidth = tablePr.addNewTblW();
//设置表格的宽度大小
tableWidth.setW(BigInteger.valueOf(8000)); /**
* 获取表格中的行 以及设计行样式
*/
//获取表格中的所有行
List<XWPFTableRow> rowList = table.getRows();
XWPFTableRow row;
row = rowList.get(0);
row.setHeight(2000);
//为这一行增加一列
row.addNewTableCell();
//获取行属性
CTTrPr rowPr = row.getCtRow().addNewTrPr();
row.getCtRow(); /**
* 获取表格中的列 以及设计列样式
*/
//获取某个单元格
XWPFTableCell cell ;
cell = row.getCell(0);
cell.setText("第一行\r\n第一列");
//单元格背景颜色
cell.setColor("676767");
//获取单元格样式
CTTcPr cellPr = cell.getCTTc().addNewTcPr();
//表格内容垂直居中
cellPr.addNewVAlign().setVal(STVerticalJc.CENTER);
//设置单元格的宽度
cellPr.addNewTcW().setW(BigInteger.valueOf(5000)); xwpfDocument.write(outputStream);
outputStream.close(); } catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
writeXWPFDocument();
}
}
生成word如下:

唯一的感觉就是 功能实现的太简单,没有涉及到核心的部分,感觉 不美丽!!!
【POI word】使用POI实现对Word的读取以及生成的更多相关文章
- python 使用win32com实现对word文档批量替换页眉页脚
最近由于工作需要,需要将70个word文件的页眉页脚全部进行修改,在想到这个无聊/重复/没有任何技术含量的工作时,我的内心是相当奔溃的.就在我接近奔溃的时候我突然想到完全可以用python脚本来实现这 ...
- jeecms系统使用介绍——通过二次开发实现对word、pdf、txt等上传附件的全文检索
转载请注明出处:http://blog.csdn.net/dongdong9223/article/details/76912307 本文出自[我是干勾鱼的博客] 之前在文章<基于Java的门户 ...
- C#实现对Word文件读写[转]
手头上的一个项目报表相对比较简单,所以报表打印采用VBA引擎,通过定制Word模版,然后根据模版需要填充数据,然后OK,打印即可. 实现方法:首先需要引用VBA组建,我用的是Office2003 Pr ...
- 利用COM组件实现对WORD书签处写入值
using System; using System.Collections.Generic; using System.Text; using Microsoft.Office.Interop.Wo ...
- 利用COM组件实现对WORD书签各种操作大全,看这一篇就够了
有个需求是,程序导出一份word报告,报告中有各种各样的表格,导出时还需要插入图片. 脑海中迅速闪过好几种组件,openxml组件,com组件,npoi.为了减少程序画复杂表格,我们选用了com组件+ ...
- 使用 xlrd 模块实现对excel 的读取、excel转json 、excel 转 mysql insert 语句
#-*- coding:utf-8 -*- # 处理 excel 中的 area 为 Mysql insert 语句 import xlrd, json, codecs, os # data = xl ...
- Apache POI 实现对 Excel 文件读写
1. Apache POI 简介 Apache POI是Apache软件基金会的开放源码函式库. 提供API给Java应用程序对Microsoft Office格式档案读和写的功能. 老外起名字总是很 ...
- 基于DevExpress实现对PDF、Word、Excel文档的预览及操作处理
http://www.cnblogs.com/wuhuacong/p/4175266.html 在一般的管理系统模块里面,越来越多的设计到一些常用文档的上传保存操作,其中如PDF.Word.Excel ...
- JAVA-----基于POI实现对Excel导入
在日常项目开发中, 数据录入和导出是十分普遍的需求,因此,导入导出也成为了开发中一个经典的功能.数据导出的格式一般是excel或者pdf,而批量导入的信息一般是借助excel来减轻工作量,提高效率. ...
随机推荐
- Qt 使用sqlserver
1. pro 添加 QT +=sql 2. void MainWindow::connectSqlServer() { QSettings *setIni = new QSettings( ...
- perl 从文件里读出变量无法使用解决办法
最近在写一个perl函数,把test case 放到配置文件里,读出来然后使用system运行. 我的本意是: 配置文件conf ping -c $count $ip #在主程序中定义$ip和$cou ...
- ffmpeg-20160617-git-bin.7z ffmpeg-20160626-git-bin.7z
ESC 退出 0 进度条开关 1 屏幕原始大小 2 屏幕1/2大小 3 屏幕1/3大小 4 屏幕1/4大小 S 下一帧 [ -2秒 ] +2秒 ; -1秒 ' +1秒 下一个帧 -> -5秒 f ...
- 通过syslog接收远程日志
通过syslog接收远程日志 通过syslog接收远程主机的日志,需要做一些环境配置. 客户机A通过syslog将日志信息发送到服务主机B(或称日志采集服务器).以下说明配置过程(我的实验环境 ...
- 2106 Problem F Shuffling Along 中石油-未提交-->已提交
题目描述 Most of you have played card games (and if you haven’t, why not???) in which the deck of cards ...
- jquery格式化时间
使用方法: new Date().format("yyyy-MM-dd hh:mm:ss"); 格式: Date.prototype.format = function (form ...
- Mysql 基础3
1. 逗号是个好东西2.对于多条件查询 和范围查询 的灵活运用(and 和or 的灵活运用)in 用的时候注意 补充select * from car where name like '%奥迪%' a ...
- 【python】类中的super().__init__()
来源:百度知道 python中的super( test, self).__init__()是什么意思? 首先找到test的父类(比如是类A),然后把类test的对象self转换为类A的对象,然后&qu ...
- HDU 5879 Cure -2016 ICPC 青岛赛区网络赛
题目链接 题意:给定一个数n,求1到n中的每一项的平方分之一的累加和. 题解:题目没有给数据范围,而实际上n很大很大超过long long.因为题目只要求输出五位小数,我们发现当数大到一定程度时值是固 ...
- 9.22 window对象、document对象
一.window对象: 属性(值或者子对象): opener:打开当前窗口的源窗口,如果当前窗口是首次启动浏览器打开的,则opener是null,可以利用这个属性来关闭源窗口 dialogArgume ...