项目结构如下:

第一部分:先是读取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的读取以及生成的更多相关文章

  1. python 使用win32com实现对word文档批量替换页眉页脚

    最近由于工作需要,需要将70个word文件的页眉页脚全部进行修改,在想到这个无聊/重复/没有任何技术含量的工作时,我的内心是相当奔溃的.就在我接近奔溃的时候我突然想到完全可以用python脚本来实现这 ...

  2. jeecms系统使用介绍——通过二次开发实现对word、pdf、txt等上传附件的全文检索

    转载请注明出处:http://blog.csdn.net/dongdong9223/article/details/76912307 本文出自[我是干勾鱼的博客] 之前在文章<基于Java的门户 ...

  3. C#实现对Word文件读写[转]

    手头上的一个项目报表相对比较简单,所以报表打印采用VBA引擎,通过定制Word模版,然后根据模版需要填充数据,然后OK,打印即可. 实现方法:首先需要引用VBA组建,我用的是Office2003 Pr ...

  4. 利用COM组件实现对WORD书签处写入值

    using System; using System.Collections.Generic; using System.Text; using Microsoft.Office.Interop.Wo ...

  5. 利用COM组件实现对WORD书签各种操作大全,看这一篇就够了

    有个需求是,程序导出一份word报告,报告中有各种各样的表格,导出时还需要插入图片. 脑海中迅速闪过好几种组件,openxml组件,com组件,npoi.为了减少程序画复杂表格,我们选用了com组件+ ...

  6. 使用 xlrd 模块实现对excel 的读取、excel转json 、excel 转 mysql insert 语句

    #-*- coding:utf-8 -*- # 处理 excel 中的 area 为 Mysql insert 语句 import xlrd, json, codecs, os # data = xl ...

  7. Apache POI 实现对 Excel 文件读写

    1. Apache POI 简介 Apache POI是Apache软件基金会的开放源码函式库. 提供API给Java应用程序对Microsoft Office格式档案读和写的功能. 老外起名字总是很 ...

  8. 基于DevExpress实现对PDF、Word、Excel文档的预览及操作处理

    http://www.cnblogs.com/wuhuacong/p/4175266.html 在一般的管理系统模块里面,越来越多的设计到一些常用文档的上传保存操作,其中如PDF.Word.Excel ...

  9. JAVA-----基于POI实现对Excel导入

    在日常项目开发中, 数据录入和导出是十分普遍的需求,因此,导入导出也成为了开发中一个经典的功能.数据导出的格式一般是excel或者pdf,而批量导入的信息一般是借助excel来减轻工作量,提高效率. ...

随机推荐

  1. manage account

    #!/bin/bash # #Delete_user - Automates the steps to remove an account # ############################ ...

  2. codeforces 336 Div.2 B. Hamming Distance Sum

    题目链接:http://codeforces.com/problemset/problem/608/B 题目意思:给出两个字符串 a 和 b,然后在b中找出跟 a 一样长度的连续子串,每一位进行求相减 ...

  3. C#字符串的四舍五入

    Round(Decimal) Round(Double) Round(Decimal, Int32) Round(Decimal, MidpointRounding) Round(Double, In ...

  4. cocos2d-x 第一篇 环境搭建

    官网:http://www.cocos2d-x.org/ 下载一个稳定版的cocos2d-x (网址:http://download.cocos2d-x.org/ Github Repository ...

  5. Log4j的使用

    一,Log4j简介 日志的三个目的: 1. 监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作                      2.跟踪代码运行时轨迹,作为日后审计的依 ...

  6. iOS MD5加密

    1.MD5加密 Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护.该算法的文件号为RFC 1321 ...

  7. [Android Pro] adb 进入 recovery, adb 进入 bootloader

    reference to : http://blog.csdn.net/mldxs/article/details/18699965 重启到Recovery界面 adb reboot recovery ...

  8. ppt动画制作bullets

    动画->效果选项->作为一个对象 这样之后,字总是在一段时间后就自己出来,而不是我们点一下再出来,解决方法是对同一段字重复设置,后面那个会默认是点一下,出一张,在把之前的动画删除即可.

  9. MFC添加菜单事件

    双击draw.rc,就能看到.

  10. NPOI基本操作XLS

    using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using Sys ...