【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 }

在读取到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 }

生成word如下:

唯一的感觉就是 功能实现的太简单,没有涉及到核心的部分,感觉 不美丽!!!

时间: 2024-10-29 20:36:01

【POI word】使用POI实现对Word的读取以及生成的相关文章

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

手头上的一个项目报表相对比较简单,所以报表打印采用VBA引擎,通过定制Word模版,然后根据模版需要填充数据,然后OK,打印即可. 实现方法:首先需要引用VBA组建,我用的是Office2003 Professional,Dll版本号为Microsoft Word11.0 另外当然还需要引用Interop.Word.Dll. 代码如下: ///#region 打开Word文档,并且返回对象wDoc,wDoc /// /// 打开Word文档,并且返回对象wDoc,wDoc /// /// 完整W

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

using System; using System.Collections.Generic; using System.Text; using Microsoft.Office.Interop.Word; using System.Windows.Forms; using System.IO; using System.Reflection; namespace HustCAD.IntePLM.Win.BatchEnterWinUI { public class SignWord { //Wo

通过vba实现对word当中个的标签进行批量的替换

最近在做的项目,要实现自动生成合同,然后想通过vba进行对合同(word版)中的相同的地方进行批量的替换. 于是就通过标签的形式对word文档当中的字段进行替换操作.代码如下: Public Function updatebookmarkloop(app As Object, bookmarkbase As String, nvalue As Variant, bot As Long, top As Long) Dim counter As Long Dim name As String cou

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

#-*- coding:utf-8 -*- # 处理 excel 中的 area 为 Mysql insert 语句 import xlrd, json, codecs, os # data = xlrd.open_workbook('101.xls') data = xlrd.open_workbook('C:\Users\Administrator\Desktop\changanyiyuan.xlsx') # table = data.sheets()[0] table = data.she

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

原文:基于DevExpress实现对PDF.Word.Excel文档的预览及操作处理 在一般的管理系统模块里面,越来越多的设计到一些常用文档的上传保存操作,其中如PDF.Word.Excel等文档,有时候是通过分布式的WCF技术实现数据的显示和处理,因此希望直接预览而不需要下载文件,这样能够给我们提供很多的方便.在DevExpress里面,提供了相应的控件来显示和处理这些文档,本文主要介绍如何利用DevExpress的控件实现对PDF.Word.Excel文档的预览和操作处理. 1.PDF的预览

POI (Apache POI)

Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. 基本功能 编辑 结构: HSSF - 提供读写Microsoft Excel格式档案的功能. XSSF - 提供读写Microsoft Excel OOXML格式档案的功能. HWPF - 提供读写Microsoft Word格式档案的功能. HSLF - 提供读写Microsoft PowerPoint格式档案的功能. HDGF - 提供读写Mi

51单片机实现对24C02进行页写、顺序读取并显示验证

源:51单片机实现对24C02进行页写.顺序读取并显示验证 //************************************************************************************* //**程序名称:51单片机实现对24C02进行页写.顺序读取并显示验证 //**编写人:**** //**修改人:**** //**程序目的:熟悉I2C总线协议,实现51模拟I2C时序和24C02通信 //**功能描述:51单片机将8个字节数据写入24C02的一

用 Python 脚本实现对 Linux 服务器的监控

hon 分享到:8 原文出处: 曹江华 目前 Linux 下有一些使用 Python 语言编写的 Linux 系统监控工具 比如 inotify-sync(文件系统安全监控软件).glances(资源监控工具)在实际工作中,Linux 系统管理员可以根据自己使用的服务器的具体情况编写一下简单实用的脚本实现对 Linux 服务器的监控. 本文介绍一下使用 Python 脚本实现对 Linux 服务器 CPU 内存 网络的监控脚本的编写. Python 版本说明 Python 是由 Guido va

Java Web学习系列——Maven Web项目中集成使用Spring、MyBatis实现对MySQL的数据访问

本篇内容还是建立在上一篇Java Web学习系列——Maven Web项目中集成使用Spring基础之上,对之前的Maven Web项目进行升级改造,实现对MySQL的数据访问. 添加依赖Jar包 这部分内容需要以下Jar包支持 mysql-connector:MySQL数据库连接驱动,架起服务端与数据库沟通的桥梁: MyBatis:一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架: log4j:Apache的开源项目,一个功能强大的日志组件,提供方便的日志记录: 修改后的pom.xm