700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > java写入word_JAVA实现Word文件读写

java写入word_JAVA实现Word文件读写

时间:2021-05-20 07:51:28

相关推荐

java写入word_JAVA实现Word文件读写

准备材料

1、在D盘下新建一个template.doc文档,内容如下:

image.png

2、pom.xml依赖:

org.apache.poi

poi-scratchpad

3.17

junit

junit

4.12

test

3、项目结构:

image.png

4、概念

Apache poi的hwpf模块是专门用来对word doc文件进行读写操作的。在hwpf里面我们使用HWPFDocument来表示一个word doc文档。在HWPFDocument里面有这么几个概念:

Range:它表示一个范围,这个范围可以是整个文档,也可以是里面的某一小节(Section),也可以是某一个段落(Paragraph),还可以是拥有共同属性的一段文本(CharacterRun)。

Section:word文档的一个小节,一个word文档可以由多个小节构成。

Paragraph:word文档的一个段落,一个小节可以由多个段落构成。

CharacterRun:具有相同属性的一段文本,一个段落可以由多个CharacterRun组成。

Table:一个表格。

TableRow:表格对应的行。

TableCell:表格对应的单元格。

Section、Paragraph、CharacterRun和Table都继承自Range。

读取Word文件功能

1、读取文件类ReadDoc.java:

import org.apache.poi.hwpf.HWPFDocument;

import org.apache.poi.hwpf.usermodel.*;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.InputStream;

public class ReadDoc {

public void testReadByDoc(String path) throws Exception {

InputStream is = new FileInputStream(path);

HWPFDocument doc = new HWPFDocument(is);

//输出书签信息

this.printInfo(doc.getBookmarks());

//输出文本

System.out.println(doc.getDocumentText());

Range range = doc.getRange();

this.printInfo(range);

//读表格

this.readTable(range);

//读列表

this.readList(range);

//把当前HWPFDocument写到输出流中

doc.write(new FileOutputStream("D:\\test.doc"));

is.close();

}

/**

* 输出书签信息

* @param bookmarks

*/

private void printInfo(Bookmarks bookmarks) {

int count = bookmarks.getBookmarksCount();

System.out.println("书签数量:" + count);

Bookmark bookmark;

for (int i=0; i

bookmark = bookmarks.getBookmark(i);

System.out.println("书签" + (i+1) + "的名称是:" + bookmark.getName());

System.out.println("开始位置:" + bookmark.getStart());

System.out.println("结束位置:" + bookmark.getEnd());

}

}

/**

* 读表格

* 每一个回车符代表一个段落,所以对于表格而言,每一个单元格至少包含一个段落,每行结束都是一个段落。

* @param range

*/

private void readTable(Range range) {

//遍历range范围内的table。

TableIterator tableIter = new TableIterator(range);

Table table;

TableRow row;

TableCell cell;

while (tableIter.hasNext()) {

table = tableIter.next();

int rowNum = table.numRows();

for (int j=0; j

row = table.getRow(j);

int cellNum = row.numCells();

for (int k=0; k

cell = row.getCell(k);

//输出单元格的文本

System.out.println(cell.text().trim());

}

}

}

}

/**

* 读列表

* @param range

*/

private void readList(Range range) {

int num = range.numParagraphs();

Paragraph para;

for (int i=0; i

para = range.getParagraph(i);

if (para.isInList()) {

System.out.println("list: " + para.text());

}

}

}

/**

* 输出Range

* @param range

*/

private void printInfo(Range range) {

//获取段落数

int paraNum = range.numParagraphs();

System.out.println(paraNum);

for (int i=0; i

System.out.println("段落" + (i+1) + ":" + range.getParagraph(i).text());

}

int secNum = range.numSections();

System.out.println(secNum);

Section section;

for (int i=0; i

section = range.getSection(i);

System.out.println(section.getMarginLeft());

System.out.println(section.getMarginRight());

System.out.println(section.getMarginTop());

System.out.println(section.getMarginBottom());

System.out.println(section.getPageHeight());

System.out.println(section.text());

}

}

}

2、功能测试:

import org.junit.Test;

public class ReadDocTest {

@Test

public void testReadByDoc() throws Exception {

ReadDoc rd = new ReadDoc();

rd.testReadByDoc("D:\\template.doc");

}

}

写入文件功能

1、写入文件类WriteDoc.java:

import org.apache.poi.hwpf.HWPFDocument;

import org.apache.poi.hwpf.usermodel.Range;

import java.io.*;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.List;

public class WriteDoc {

public void testWrite() throws Exception {

List list = new ArrayList();

list.add(new Users("a","男",10,new SimpleDateFormat("yyyy-MM-dd").parse("-08-08")));

list.add(new Users("b","女",20,new SimpleDateFormat("yyyy-MM-dd").parse("-07-07")));

String templatePath = "D:\\template.doc";

InputStream is = new FileInputStream(templatePath);

OutputStream os = null;

HWPFDocument doc = new HWPFDocument(is);

Range range = doc.getRange();

for(int i=0;i

Users user = list.get(i);

//把range范围内的${reportDate}替换为当前的日期

range.replaceText("${name}", user.getName());

range.replaceText("${sex}", user.getSex());

range.replaceText("${age}", String.valueOf(user.getAge()));

range.replaceText("${date}", user.getBirthday().toString());

os = new FileOutputStream(new File("D:\\"+user.getName()+".doc"));

//把doc输出到输出流中

doc.write(os);

}

os.close();

is.close();

}

}

2、功能测试:

import org.junit.Test;

public class WriteDocTest {

@Test

public void testWrite() throws Exception {

WriteDoc wd = new WriteDoc();

wd.testWrite();

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。