【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来减轻工作量,提高效率. ...
随机推荐
- TS初探
简介 TypeScript具有类型系统,且是JavaScript的超集.它可以编译成普通的JavaScript代码. TypeScript支持任意浏览器,任意环境,任意系统并且是开源的.Ts主要用于解 ...
- 关于TxQBService报的错,腾讯你真牛B啊
腾讯你真牛B啊,浏览器都7了,还特么的报这么低级的错误,还每10秒写一条windows日志,让人有什么心情用你的浏览器,滚.
- 如何点击按钮后在加载外部的Js文件
或许有朋友遇到过,想等自己点击按钮之后才执行某一个js文件,那么,你运气好,看到了我的代码了哈哈, <html> <head> <title></title& ...
- js方法类库封装的简易示例
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></s ...
- 129. Sum Root to Leaf Numbers
题目: Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a nu ...
- iOS应用架构谈(二):View层的组织和调用方案(中)
iOS客户端应用架构看似简单,但实际上要考虑的事情不少.本文作者将以系列文章的形式来回答iOS应用架构中的种种问题,本文是其中的第二篇,主要讲View层的组织和调用方案.中篇主要讨论MVC.MVCS. ...
- September 11th 2016 Week 38th Sunday
Nothing happens unless first a dream. 一切始于梦想. When everything seems to be going against you, remembe ...
- 常用js函数整理--common.js
var h = {}; h.get = function (url, data, ok, error) { $.ajax({ url: url, data: data, dataType: 'json ...
- Javascript 封装方法
基本封装方法 请看下面的例子: var Person = function(name,age){ this.name = name; this.age = age || "未填写" ...
- 警告 - no rule to process file 'WRP_CollectionView/README.md' of type net.daringfireball.markdown for architecture i386
warning: no rule to process file '/Users/mac/Downloads/Demo/Self/WRP_CollectionView/WRP_CollectionVi ...