【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来减轻工作量,提高效率. ...
随机推荐
- Divide and conquer:Dropping tests(POJ 2976)
最大化平均值 题目大意:给定你n个分数,从中找出k个数,使∑a/∑b的最大值 这一题同样的也可以用二分法来做(用DP会超时,可见二分法是多么的实用呵!),大体上是这样子:假设最大的平均值是w,那么题目 ...
- hiho一下第一周 最长回文子串
题目链接:http://hihocoder.com/contest/hiho1/problem/1 #include <iostream> #include <cstdio> ...
- Mysql 基础3
1. 逗号是个好东西2.对于多条件查询 和范围查询 的灵活运用(and 和or 的灵活运用)in 用的时候注意 补充select * from car where name like '%奥迪%' a ...
- Luncence .Net 使用
public partial class Form1 : Form { public Form1() { InitializeComponent(); } //标准分词 private void bu ...
- HTML5基本标签、样式
感觉在Sublime Text3中写起来比较方便~~ 将HTML5中要用到的基本标签全部放在了一起,没有好好的整理,为了自己记忆的方便,就先这样写下来了~~ <!DOCTYPE html> ...
- [Android Rro] SDK JAR
cd ../../../outputs/aar/mkdir AAR_VERSIONmkdir JAR_VERSIONmv app-release.aar AAR_VERSION/${project_n ...
- QRTZ_表注释
QRTZ_CALENDARS 存储Quartz的Calendar信息QRTZ_CRON_TRIGGERS 存储CronTrigger,包括Cron表达式和时区信息QRTZ_FIRED_TRIGGERS ...
- python基础——面向对象编程
python基础——面向对象编程 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的 ...
- python基础——第三方模块
python基础——第三方模块 在Python中,安装第三方模块,是通过包管理工具pip完成的. 如果你正在使用Mac或Linux,安装pip本身这个步骤就可以跳过了. 如果你正在使用Window ...
- DB2 Z/os Load utility 使用
Use the LOAD online utility to load one or more tables of a table space. The LOAD utility loads reco ...