java用poi实现对word读取和修改操作

合集下载

随笔记录①—利用poi读取Word中的标题和内容

随笔记录①—利用poi读取Word中的标题和内容

随笔记录①—利⽤poi读取Word中的标题和内容使⽤时间:4⼩时使⽤poi⽅法将word中的内容提取出来,并输出到控制台或者存储到数据库poi.jar下载地址:需要导⼊的包根据标题和内容字体⼤⼩的不同,寻找所需要的段落和标题,并判断是标题还是内容。

import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import org.apache.poi.hwpf.HWPFDocument;import ermodel.CharacterRun;import ermodel.Paragraph;import ermodel.Range;import org.apache.poi.poifs.filesystem.POIFSFileSystem;public class poi_word {public static void main(String[] args) throws IOException {InputStream is = new FileInputStream(new File("path")); //读取⽂件POIFSFileSystem fs = new POIFSFileSystem(is);@SuppressWarnings("resource")HWPFDocument document = new HWPFDocument(fs);Range range = document.getRange(); //存储word内容到document中for (int i = 0; i < range.numParagraphs()-2; i++) { //numparagraphs代表段落总数int setparagraph=i; //记录当前段落Paragraph para_1 = range.getParagraph(i);// 获取第i段Paragraph para_2 = range.getParagraph(i+1);// 获取第i+1段Paragraph para_3 = range.getParagraph(i+2);// 获取第i+2段String paratext1 = para_1.text().trim().replaceAll("\r\n", ""); //当前段落的内容并去除换⾏String paratext2 = para_2.text().trim().replaceAll("\r\n", ""); //当前段落的内容并去除换⾏CharacterRun run1=para_1.getCharacterRun(0);CharacterRun run2=para_2.getCharacterRun(0);CharacterRun run3=para_3.getCharacterRun(0); //段落属性if (paratext1.length() > 0&&paratext2.length() > 0) {if(run1.getFontSize()>run2.getFontSize()&&run2.getFontSize()>run3.getFontSize()) continue; // 当连续三个及以上的字体⼤⼩不同的段落存在时则跳过当前循环,直到两个段落存在(找到⼩标题和内容) String content="";if(run1.getFontSize()>=run2.getFontSize()) { //当两段内容字体⼤⼩为⼤于时则为标题和内容相等时则同为内容content +=paratext2; //第i+1段为内容run1=run2;run2=run3; //顺序重新定位段落setparagraph++;}System.out.println(paratext1+"\t"+content);i=setparagraph;}}}}。

poi教程

poi教程

poi教程Poi教程概述:Poi是一款Java库,用于处理Microsoft Office格式文件,如Excel、Word和PowerPoint。

它提供了丰富的API,使开发人员能够读取、写入和修改这些文件。

Poi教程内容:1. 安装Poi库:首先,你需要下载并安装Poi库。

你可以从Apache的官方网站上找到最新版本的Poi库。

安装过程包括将Poi库添加到你的Java项目的构建路径中。

2. 创建Excel文档:使用Poi,你可以创建一个新的Excel文档。

你可以定义工作表、行和单元格,并在单元格中添加数据。

你还可以设置单元格的格式,如字体、颜色和边框。

3. 读取Excel文件:Poi可以读取现有的Excel文件。

你可以打开一个文件并读取工作表、行和单元格中的数据。

你还可以根据需要筛选和处理数据。

4. 写入Excel文件:除了读取数据,Poi还可以将数据写入现有的Excel文件。

你可以创建新的工作表、行和单元格,并在其中插入数据。

你可以使用Poi的API来设置单元格的格式和其他属性。

5. 处理Word和PowerPoint文件:除了处理Excel文件,Poi还可以读取和写入Word和PowerPoint文件。

你可以打开Word文档并访问其中的段落、表格和其他元素。

你还可以修改PowerPoint演示文稿中的幻灯片、文本和图像。

6. 添加图表和图像:Poi提供了创建和修改图表的功能。

你可以使用Poi的API创建各种类型的图表,并在其中添加数据。

此外,你还可以在Excel文件中添加图像,并设置其大小、位置和其他属性。

7. 导出数据:一旦你完成了对Excel、Word或PowerPoint文件的处理,你可以使用Poi将其导出为其他格式,如PDF或HTML。

这使得你可以轻松地共享和打印处理过的文件。

8. 错误处理和异常处理:在使用Poi时,可能会遇到各种错误和异常。

你需要学会如何正确处理这些错误,以确保你的代码能够顺利运行。

JavaPOI操作word文档内容、表格

JavaPOI操作word文档内容、表格

JavaPOI操作word⽂档内容、表格⼀、pom<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.0.0</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>4.0.0</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.0.0</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>4.0.0</version></dependency>⼆、直接上代码word模板中${content} 注意我只有在.docx⽤XWPFDocument才有效2.1/*** 获取document**/XWPFDocument document = null;try {document = new XWPFDocument(inputStream);} catch (IOException ioException) {ioException.printStackTrace();}/*** 替换段落⾥⾯的变量** @param doc 要替换的⽂档* @param params 参数*/private void replaceInPara(XWPFDocument doc, Map<String, String> params) {for (XWPFParagraph para : doc.getParagraphs()) {replaceInPara(para, params);}}/*** 替换段落⾥⾯的变量** @param para 要替换的段落* @param params 参数*/private void replaceInPara(XWPFParagraph para, Map<String, String> params) {List<XWPFRun> runs;Matcher matcher;replaceText(para);//如果para拆分的不对,则⽤这个⽅法修改成正确的if (matcher(para.getParagraphText()).find()) {runs = para.getRuns();for (int i = 0; i < runs.size(); i++) {XWPFRun run = runs.get(i);String runText = run.toString();matcher = matcher(runText);if (matcher.find()) {while ((matcher = matcher(runText)).find()) {runText = matcher.replaceFirst(String.valueOf(params.get(matcher.group(1))));}//直接调⽤XWPFRun的setText()⽅法设置⽂本时,在底层会重新创建⼀个XWPFRun,把⽂本附加在当前⽂本后⾯, para.removeRun(i);para.insertNewRun(i).setText(runText);}}}}/*** 替换⽂本内容* @param para* @return*/private List<XWPFRun> replaceText(XWPFParagraph para) {List<XWPFRun> runs = para.getRuns();String str = "";boolean flag = false;for (int i = 0; i < runs.size(); i++) {XWPFRun run = runs.get(i);String runText = run.toString();if (flag || runText.equals("${")) {str = str + runText;flag = true;para.removeRun(i);if (runText.equals("}")) {flag = false;para.insertNewRun(i).setText(str);str = "";}i--;}}return runs;}2.22.2.1XWPFTable table = document.getTableArray(0);//获取当前表格XWPFTableRow twoRow = table.getRow(2);//获取某⼀⾏XWPFTableRow nextRow = table.insertNewTableRow(3);//插⼊⼀⾏XWPFTableCell firstRowCellOne = firstRow.getCell(0);firstRowCellOne.removeParagraph(0);//删除默认段落,要不然表格内第⼀条为空⾏XWPFParagraph pIO2 =firstRowCellOne.addParagraph();XWPFRun rIO2 = pIO2.createRun();rIO2.setFontFamily("宋体");//字体rIO2.setFontSize(8);//字体⼤⼩rIO2.setBold(true);//是否加粗rIO2.setColor("FF0000");//字体颜⾊rIO2.setText("这是写⼊的内容");//rIO2.addBreak(BreakType.TEXT_WRAPPING);//软换⾏,亲测有效/*** 复制单元格和样式** @param targetRow 要复制的⾏* @param sourceRow 被复制的⾏*/public void createCellsAndCopyStyles(XWPFTableRow targetRow, XWPFTableRow sourceRow) {targetRow.getCtRow().setTrPr(sourceRow.getCtRow().getTrPr());List<XWPFTableCell> tableCells = sourceRow.getTableCells();if (CollectionUtils.isEmpty(tableCells)) {return;}for (XWPFTableCell sourceCell : tableCells) {XWPFTableCell newCell = targetRow.addNewTableCell();newCell.getCTTc().setTcPr(sourceCell.getCTTc().getTcPr());List sourceParagraphs = sourceCell.getParagraphs();if (CollectionUtils.isEmpty(sourceParagraphs)) {continue;}XWPFParagraph sourceParagraph = (XWPFParagraph) sourceParagraphs.get(0);List targetParagraphs = newCell.getParagraphs();if (CollectionUtils.isEmpty(targetParagraphs)) {XWPFParagraph p = newCell.addParagraph();p.getCTP().setPPr(sourceParagraph.getCTP().getPPr());XWPFRun run = p.getRuns().isEmpty() ? p.createRun() : p.getRuns().get(0);run.setFontFamily(sourceParagraph.getRuns().get(0).getFontFamily());} else {XWPFParagraph p = (XWPFParagraph) targetParagraphs.get(0);p.getCTP().setPPr(sourceParagraph.getCTP().getPPr());XWPFRun run = p.getRuns().isEmpty() ? p.createRun() : p.getRuns().get(0);if (sourceParagraph.getRuns().size() > 0) {run.setFontFamily(sourceParagraph.getRuns().get(0).getFontFamily());}}}}#### 2.2.3/*** 合并单元格** @param table 表格对象* @param beginRowIndex 开始⾏索引* @param endRowIndex 结束⾏索引* @param colIndex 合并列索引*/public void mergeCell(XWPFTable table, int beginRowIndex, int endRowIndex, int colIndex) { if (beginRowIndex == endRowIndex || beginRowIndex > endRowIndex) {return;}//合并⾏单元格的第⼀个单元格CTVMerge startMerge = CTVMerge.Factory.newInstance();startMerge.setVal(STMerge.RESTART);//合并⾏单元格的第⼀个单元格之后的单元格CTVMerge endMerge = CTVMerge.Factory.newInstance();endMerge.setVal(STMerge.CONTINUE);table.getRow(beginRowIndex).getCell(colIndex).getCTTc().getTcPr().setVMerge(startMerge); for (int i = beginRowIndex + 1; i <= endRowIndex; i++) {table.getRow(i).getCell(colIndex).getCTTc().getTcPr().setVMerge(endMerge);}}/*** insertRow 在word表格中指定位置插⼊⼀⾏,并将某⼀⾏的样式复制到新增⾏* @param copyrowIndex 需要复制的⾏位置* @param newrowIndex 需要新增⼀⾏的位置* */public static void insertRow(XWPFTable table, int copyrowIndex, int newrowIndex) {// 在表格中指定的位置新增⼀⾏XWPFTableRow targetRow = table.insertNewTableRow(newrowIndex);// 获取需要复制⾏对象XWPFTableRow copyRow = table.getRow(copyrowIndex);//复制⾏对象targetRow.getCtRow().setTrPr(copyRow.getCtRow().getTrPr());//或许需要复制的⾏的列List<XWPFTableCell> copyCells = copyRow.getTableCells();//复制列对象XWPFTableCell targetCell = null;for (int i = 0; i < copyCells.size(); i++) {XWPFTableCell copyCell = copyCells.get(i);targetCell = targetRow.addNewTableCell();targetCell.getCTTc().setTcPr(copyCell.getCTTc().getTcPr());if (copyCell.getParagraphs() != null && copyCell.getParagraphs().size() > 0) {targetCell.getParagraphs().get(0).getCTP().setPPr(copyCell.getParagraphs().get(0).getCTP().getPPr()); if (copyCell.getParagraphs().get(0).getRuns() != null&& copyCell.getParagraphs().get(0).getRuns().size() > 0) {XWPFRun cellR = targetCell.getParagraphs().get(0).createRun();cellR.setBold(copyCell.getParagraphs().get(0).getRuns().get(0).isBold());}}}}/*** 正则匹配字符串** @param str* @return*/private Matcher matcher(String str) {Pattern pattern = pile("\\$\\{(.+?)\\}", Pattern.CASE_INSENSITIVE);Matcher matcher = pattern.matcher(str);return matcher;}。

poi对hwpfdocument对象操作方法

poi对hwpfdocument对象操作方法

poi对hwpfdocument对象操作方法### POI 对HWPFDocument 对象操作方法Apache POI 是一个开源的Java API,用于操作Microsoft Office 格式的文件。

其中,HWPF(Horrible Word Processor Format)是POI 库的一部分,用于处理Microsoft Word 文件(.doc格式)。

`HWPFDocument`对象是HWPF包中的核心类,用于表示一个打开的Word文档。

以下是一些基本的`HWPFDocument`对象操作方法。

#### 1.创建和打开文档```javaimport org.apache.poi.hwpf.HWPFDocument;import java.io.File;import java.io.FileInputStream;// 创建一个HWPFDocument对象HWPFDocument document = new HWPFDocument(new FileInputStream(new File("example.doc")));```#### 2.读取文档内容```java// 读取文档中的文本String text = document.getDocumentText();```#### 3.获取段落```java// 获取文档中的所有段落Range range = document.getRange(); Paragraph paragraphs[] = range.getParagraphs(); ```#### 4.修改文本```java// 修改文档中的文本range.replaceText("oldText", "newText");```#### 5.插入文本```java// 在指定位置插入文本range.insertBefore("insertedText");range.insertAfter("insertedText");```#### 6.添加段落```java// 添加一个新段落Paragraph newPara = range.insertParagraph(); ewPara.setText("New paragraph");```#### 7.格式化文本```java// 设置文本格式CharacterRun run = newPara.getCharacterRun(0);run.setFontSize(12);run.setFontName("Arial");run.setBold(true);```#### 8.保存和关闭文档```javaimport java.io.FileOutputStream;// 保存对文档所做的更改FileOutputStream out = new FileOutputStream(newFile("modified_example.doc"));document.write(out);out.close();document.close();```#### 注意事项- 操作`HWPFDocument`对象时,需要正确处理资源释放和异常处理,避免内存泄漏和文件损坏。

javapoi解析word的方法

javapoi解析word的方法

javapoi解析word的⽅法之前做过⽤java读取word⽂档,获取word⽂本内容。

但发现docx的⽀持,doc就异常了。

后来找了很多资料发现是解析⽅法不⼀样。

⾸先要导⼊poi相关的jar包我⽤的是maven,pom.xml引⼊如下:<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.8</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>3.8</version></dependency>java获取word⽂本内容如下:public BaseResp getParsedTxt(MultipartFile file) throws Exception {BaseResp br=new BaseResp("200","") ;String textType = file.getContentType();String txt = "";if(textType.equals(TXT_TYPE)){String code = getCharset(file);txt = new String(file.getBytes(),code);}else if(textType.equals(DOC_TYPE)){HWPFDocument doc = new HWPFDocument(file.getInputStream());Range rang = doc.getRange();txt = rang.text();System.out.println(txt);}else if(textType.equals(DOCX_TYPE)){File uFile = new File("tempFile.docx");if(!uFile.exists()){uFile.createNewFile();}FileCopyUtils.copy(file.getBytes(), uFile);OPCPackage opcPackage = POIXMLDocument.openPackage("tempFile.docx");POIXMLTextExtractor extractor = new XWPFWordExtractor(opcPackage);txt= extractor.getText();uFile.delete();}else{br = new BaseResp("300","上传⽂件格式错误,请上传.txt或者.docx");return br;}br.setDatas(txt);return br;}功能实现了。

java poi的使用

java poi的使用

java poi的使用JavaPOI是一种流行的Java库,用于在Java中读取和写入Microsoft Office格式的文件,例如Excel、Word和PowerPoint。

它提供了丰富的API来处理这些文件,包括创建、修改、读取和写入文件。

Java POI可以与多种文件格式一起使用,包括旧版本的Microsoft Office文件(.xls),以及新版本的Open Office XML文件(.xlsx)。

使用Java POI可以实现许多功能,例如:1. 读取和解析Excel文件中的数据2. 写入数据到Excel文件中3. 创建Excel文件4. 修改Excel文件中的数据5. 处理Excel文件中的格式和样式6. 读取和解析Word文件中的数据7. 写入数据到Word文件中8. 创建Word文件9. 修改Word文件中的数据10. 处理Word文件中的格式和样式11. 读取和解析PowerPoint文件中的数据12. 写入数据到PowerPoint文件中13. 创建PowerPoint文件14. 修改PowerPoint文件中的数据15. 处理PowerPoint文件中的格式和样式在使用Java POI时,需要了解一些基本概念,例如:1. Workbook:Excel工作簿,包含多个Sheet2. Sheet:Excel工作表,包含多个Row3. Row:Excel行,包含多个Cell4. Cell:Excel单元格,包含一个值和一个样式Java POI提供了多个类和方法来操作这些基本元素,可以根据需要选择合适的API来实现所需的功能。

总之,Java POI是Java开发中一个非常强大的工具,可以帮助我们处理Microsoft Office格式的文件。

熟练掌握Java POI的使用,可以提高我们的工作效率,减少人力成本,也可以让我们的应用程序更加灵活和实用。

POI操作WORD

POI操作WORD
FileInputStream in = new FileInputStream(new File(fileName));
WordExtractor extractor = new WordExtractor(in);
String text = extractor.getText();
import java.io.FileInputStream;
import org.apache.poi.hwpf.HWPFDocument;
import ermodel.Range;
import ermodel.CharacterRout.println(sb.toString());
}
public static void main(String[] args) {
try {
getAwayAngle("e:\\test1.doc");
} catch (Exception e) {
Range range = new Range(i, i+1, doc);
//之所以用这个构造方法,是因为整篇文章的字符判断不准确。只好一个字符一个字符的来判断。
//而且API的说明文字相当的不全。
for(int j=0;j<range.numCharacterRuns();j++){
HWPFDocument doc = new HWPFDocument(in);
int length = doc.characterLength();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < length-1; i++) {

Java实现word文档在线预览,读取office(word,excel,ppt)文件

Java实现word文档在线预览,读取office(word,excel,ppt)文件

Java实现word⽂档在线预览,读取office(word,excel,ppt)⽂件想要实现word或者其他office⽂件的在线预览,⼤部分都是⽤的两种⽅式,⼀种是使⽤openoffice转换之后再通过其他插件预览,还有⼀种⽅式就是通过POI读取内容然后预览。

⼀、使⽤openoffice⽅式实现word预览主要思路是:1.通过第三⽅⼯具openoffice,将word、excel、ppt、txt等⽂件转换为pdf⽂件2.通过swfTools将pdf⽂件转换成swf格式的⽂件3.通过FlexPaper⽂档组件在页⾯上进⾏展⽰我使⽤的⼯具版本:openof:3.4.1swfTools:1007FlexPaper:这个关系不⼤,我随便下的⼀个。

推荐使⽤1.5.1JODConverter:需要jar包,如果是maven管理直接引⽤就可以操作步骤:1.office准备下载openoffice:从过往⽂件,其他语⾔中找到中⽂版3.4.1的版本下载后,解压缩,安装然后找到安装⽬录下的program ⽂件夹在⽬录下运⾏soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard如果运⾏失败,可能会有提⽰,那就加上 .\ 在运⾏试⼀下这样openoffice的服务就开启了。

2.将flexpaper⽂件中的js⽂件夹(包含了flexpaper_flash_debug.js,flexpaper_flash.js,jquery.js,这三个js⽂件主要是预览swf⽂件的插件)拷贝⾄⽹站根⽬录;将FlexPaperViewer.swf拷贝⾄⽹站根⽬录下(该⽂件主要是⽤在⽹页中播放swf⽂件的播放器)项⽬结构:页⾯代码:fileUpload.jsp<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>⽂档在线预览系统</title><style>body {margin-top:100px;background:#fff;font-family: Verdana, Tahoma;}a {color:#CE4614;}#msg-box {color: #CE4614; font-size:0.9em;text-align:center;}#msg-box .logo {border-bottom:5px solid #ECE5D9;margin-bottom:20px;padding-bottom:10px;}#msg-box .title {font-size:1.4em;font-weight:bold;margin:0 0 30px 0;}#msg-box .nav {margin-top:20px;}</style></head><body><div id="msg-box"><form name="form1" method="post" enctype="multipart/form-data" action="docUploadConvertAction.jsp"><div class="title">请上传要处理的⽂件,过程可能需要⼏分钟,请稍候⽚刻。

poi数据使用

poi数据使用

poi数据使用POI(Apache POI)是一个用于操作Microsoft Office格式文件(如doc、xls、ppt等)的Java API。

它提供了一组类和方法,使开发人员可以轻松地读取、写入和操作Office文档中的数据。

本文将介绍如何使用POI来处理poi数据。

二、POI数据读取1. 导入POI库首先,我们需要在项目中导入POI库。

可以下载POI的jar文件,然后将其添加到项目的classpath中。

2. 创建工作簿和工作表使用POI来读取poi数据之前,我们需要创建一个工作簿和一个工作表对象。

可以使用HSSFWorkbook和HSSFSheet类来分别代表工作簿和工作表。

3. 读取数据使用POI的API方法,我们可以逐行或逐列读取poi数据。

可以使用HSSFRow和HSSFCell类来分别代表行和单元格。

通过遍历行和列的方式,可以获取到相应的数据。

三、POI数据写入1. 创建工作簿和工作表与数据读取类似,我们首先需要创建一个工作簿和一个工作表对象。

可以使用HSSFWorkbook和HSSFSheet类来分别代表工作簿和工作表。

2. 写入数据使用POI的API方法,我们可以将数据写入到指定的单元格中。

可以使用HSSFRow和HSSFCell类来分别代表行和单元格。

可以通过设置单元格的值来进行数据的写入操作。

四、POI数据操作注意事项1. 数据格式转换在进行POI数据读取或写入操作时,需要注意数据的格式转换。

例如,将数字类型的数据转换为字符串,或将字符串类型的数据转换为日期类型。

2. 数据校验在写入数据之前,我们需要进行数据校验,确保所写入的数据符合需求。

例如,对于字符串类型的数据,可以进行长度、格式等校验。

3. 数据样式设置为了使POIpoi数据的呈现更加美观,我们可以设置数据的样式。

可以使用HSSFCellStyle类来设置单元格的字体、背景色、边框等样式。

本文介绍了如何使用POI对poi数据进行读取和写入操作。

使用poi读取word2007(.docx)中的复杂表格

使用poi读取word2007(.docx)中的复杂表格

使⽤poi读取word2007(.docx)中的复杂表格最近⼯作需要做⼀个读取word(.docx)中的表格,并以html形式输出。

这⾥使⽤了poi。

对于2007及之后的word⽂档,需要导⼊poi-ooxml-xxx.jar及其依赖包,如下图(图中为使⽤maven):pom.xml对于简单表格,可以使⽤如下⽅式来获取每个表格的内容:XWPFDocument document = new XWPFDocument(new FileInputStream("word.docx"));// 获取所有表格List<XWPFTable> tables = document.getTables();for (XWPFTable table : tables) {// 获取表格的⾏List<XWPFTableRow> rows = table.getRows();for (XWPFTableRow row : rows) {// 获取表格的每个单元格List<XWPFTableCell> tableCells = row.getTableCells();for (XWPFTableCell cell : tableCells) {// 获取单元格的内容String text = cell.getText();}}}但是对于复杂表格(含合并的单元格),则⽆法正常处理。

于是继续上⽹查询,在stackoverflow查到如下⽣成含有合并的单元格的表格:public class CreateWordTableMerge {static void mergeCellVertically(XWPFTable table, int col, int fromRow, int toRow) {for(int rowIndex = fromRow; rowIndex <= toRow; rowIndex++){CTVMerge vmerge = CTVMerge.Factory.newInstance();if(rowIndex == fromRow){// The first merged cell is set with RESTART merge valuevmerge.setVal(STMerge.RESTART);} else {// Cells which join (merge) the first one, are set with CONTINUEvmerge.setVal(STMerge.CONTINUE);}XWPFTableCell cell = table.getRow(rowIndex).getCell(col);// Try getting the TcPr. Not simply setting an new one every time.CTTcPr tcPr = cell.getCTTc().getTcPr();if (tcPr != null) {tcPr.setVMerge(vmerge);} else {// only set an new TcPr if there is not one alreadytcPr = CTTcPr.Factory.newInstance();tcPr.setVMerge(vmerge);cell.getCTTc().setTcPr(tcPr);}}}static void mergeCellHorizontally(XWPFTable table, int row, int fromCol, int toCol) {for(int colIndex = fromCol; colIndex <= toCol; colIndex++){CTHMerge hmerge = CTHMerge.Factory.newInstance();if(colIndex == fromCol){// The first merged cell is set with RESTART merge valuehmerge.setVal(STMerge.RESTART);} else {CTTcPr tcPr = cell.getCTTc().getTcPr();if (tcPr != null) {tcPr.setHMerge(hmerge);} else {// only set an new TcPr if there is not one alreadytcPr = CTTcPr.Factory.newInstance();tcPr.setHMerge(hmerge);cell.getCTTc().setTcPr(tcPr);}}}public static void main(String[] args) throws Exception {XWPFDocument document= new XWPFDocument();XWPFParagraph paragraph = document.createParagraph();XWPFRun run=paragraph.createRun();run.setText("The table:");//create tableXWPFTable table = document.createTable(3,5);for (int row = 0; row < 3; row++) {for (int col = 0; col < 5; col++) {table.getRow(row).getCell(col).setText("row " + row + ", col " + col);}}//create and set column widths for all columns in all rows//most examples don't set the type of the CTTblWidth but this//is necessary for working in all office versionsfor (int col = 0; col < 5; col++) {CTTblWidth tblWidth = CTTblWidth.Factory.newInstance();tblWidth.setW(BigInteger.valueOf(1000));tblWidth.setType(STTblWidth.DXA);for (int row = 0; row < 3; row++) {CTTcPr tcPr = table.getRow(row).getCell(col).getCTTc().getTcPr();if (tcPr != null) {tcPr.setTcW(tblWidth);} else {tcPr = CTTcPr.Factory.newInstance();tcPr.setTcW(tblWidth);table.getRow(row).getCell(col).getCTTc().setTcPr(tcPr);}}}//using the merge methodsmergeCellVertically(table, 0, 0, 1);mergeCellHorizontally(table, 1, 2, 3);mergeCellHorizontally(table, 2, 1, 4);paragraph = document.createParagraph();FileOutputStream out = new FileOutputStream("create_table.docx");document.write(out);System.out.println("create_table.docx written successully");}}运⾏⼀下确实可以实现,不过仍是⼀头雾⽔,对于其中的cTTc,tcPr,vMerge等属性仍是不知道是什么。

Java使用POI读取Word中的表格

Java使用POI读取Word中的表格

Java使⽤POI读取Word中的表格代码package live.autu.word;import java.io.FileInputStream;import org.apache.poi.hwpf.HWPFDocument;import ermodel.Paragraph;import ermodel.Range;import ermodel.Table;import ermodel.TableCell;import ermodel.TableIterator;import ermodel.TableRow;import org.apache.poi.poifs.filesystem.POIFSFileSystem;/*** Hello world!**/public class App {public static void main(String[] args) {//doc⽂档路径String filePath = "C:\\Users\\autu\\Desktop\\test.doc";//test.print(filePath,"第⼀个表");System.out.println(App.read(filePath,"第⼀个表"));;}/*** 读取⽂档中表格* @param filePath doc路径* @param set 第⼏个表格*/public static String read(String filePath,String tableName) {StringBuilder sb=new StringBuilder();try (FileInputStream in = new FileInputStream(filePath); // 载⼊⽂档POIFSFileSystem pfs = new POIFSFileSystem(in);HWPFDocument hwpf = new HWPFDocument(pfs);) {Range range = hwpf.getRange();// 得到⽂档的读取范围TableIterator it = new TableIterator(range);// 迭代⽂档中的表格while (it.hasNext()) {Table tb = (Table) it.next();// 迭代⾏,默认从0开始,可以依据需要设置i的值,改变起始⾏数,也可设置读取到那⾏,只需修改循环的判断条件即可outer:for (int i = 0; i < tb.numRows(); i++) {TableRow tr = tb.getRow(i);// 迭代列,默认从0开始for (int j = 0; j < tr.numCells(); j++) {TableCell td = tr.getCell(j);// 取得单元格// 取得单元格的内容for (int k = 0; k < td.numParagraphs(); k++) {Paragraph para = td.getParagraph(k);String s = para.text();// 去除后⾯的特殊符号if (null != s && !"".equals(s)) {s = s.substring(0, s.length() - 1);}s=s.trim();if(tableName.trim().equals(s)||i!=0) {sb.append(s + "\t");} else {break outer;}}}sb.append( "\n");}}} catch (Exception e) {e.printStackTrace();}return sb.toString();}}依赖<dependency><groupId>org.apache.poi</groupId> <artifactId>poi</artifactId><version>4.0.1</version></dependency><dependency><groupId>org.apache.poi</groupId> <artifactId>poi-scratchpad</artifactId> <version>4.0.1</version></dependency>效果图test.doc控制台打印。

使用POI来处理Excel和Word文件格式

使用POI来处理Excel和Word文件格式

// 文件二进制输入流private InputStream is = null;// 当前的Sheetprivate int currSheet;// 当前位置private int currPosition;// Sheet数量private int numOfSheets;// HSSFWorkbookHSSFWorkbook workbook = null;// 设置Cell之间以空格分割private static String EXCEL_LINE_DELIMITER = " ";// 设置最大列数private static int MAX_EXCEL_COLUMNS = 64;// 构造函数创建一个ExcelReaderpublic ExcelReader(String inputfile) throws IOException, Exception { // 判断参数是否为空或没有意义if (inputfile == null || inputfile.trim().equals("")) {throw new IOException("no input file specified");}// 取得文件名的后缀名赋值给filetypethis.filetype = inputfile.substring(stIndexOf(".") + 1);// 设置开始行为0currPosition = 0;// 设置当前位置为0currSheet = 0;// 创建文件输入流is = new FileInputStream(inputfile);// 判断文件格式if (filetype.equalsIgnoreCase("txt")) {// 如果是txt则直接创建BufferedReader读取reader = new BufferedReader(new InputStreamReader(is));}else if (filetype.equalsIgnoreCase("xls")) {// 如果是Excel文件则创建HSSFWorkbook读取workbook = new HSSFWorkbook(is);// 设置Sheet数numOfSheets = workbook.getNumberOfSheets();}else {throw new Exception("File Type Not Supported");}}// 函数readLine读取文件的一行public String readLine() throws IOException {// 如果是txt文件则通过reader读取if (filetype.equalsIgnoreCase("txt")) {String str = reader.readLine();// 空行则略去,直接读取下一行while (str.trim().equals("")) {str = reader.readLine();}return str;}// 如果是XLS文件则通过POI提供的API读取文件else if (filetype.equalsIgnoreCase("xls")) {// 根据currSheet值获得当前的sheetHSSFSheet sheet = workbook.getSheetAt(currSheet);// 判断当前行是否到但前Sheet的结尾if (currPosition > sheet.getLastRowNum()) {// 当前行位置清零currPosition = 0;// 判断是否还有Sheetwhile (currSheet != numOfSheets - 1) {// 得到下一张Sheetsheet = workbook.getSheetAt(currSheet + 1);// 当前行数是否已经到达文件末尾if (currPosition == sheet.getLastRowNum()) {// 当前Sheet指向下一张SheetcurrSheet++;continue;} else {// 获取当前行数int row = currPosition;currPosition++;// 读取当前行数据return getLine(sheet, row);}}return null;}// 获取当前行数int row = currPosition;currPosition++;// 读取当前行数据return getLine(sheet, row);}return null;}// 函数getLine返回Sheet的一行数据private String getLine(HSSFSheet sheet, int row) {// 根据行数取得Sheet的一行HSSFRow rowline = sheet.getRow(row);// 创建字符创缓冲区StringBuffer buffer = new StringBuffer();// 获取当前行的列数int filledColumns = rowline.getLastCellNum(); HSSFCell cell = null;// 循环遍历所有列for (int i = 0; i < filledColumns; i++) {// 取得当前Cellcell = rowline.getCell((short) i);String cellvalue = null;if (cell != null) {// 判断当前Cell的Typeswitch (cell.getCellType()) {// 如果当前Cell的Type为NUMERICcase HSSFCell.CELL_TYPE_NUMERIC: {// 判断当前的cell是否为Dateif (HSSFDateUtil.isCellDateFormatted(cell)) {// 如果是Date类型则,取得该Cell的Date值Date date = cell.getDateCellValue();// 把Date转换成本地格式的字符串cellvalue = cell.getDateCellValue().toLocaleString();}// 如果是纯数字else {// 取得当前Cell的数值Integer num = new Integer((int) cell.getNumericCellValue());cellvalue = String.valueOf(num);}break;}// 如果当前Cell的Type为STRINcase HSSFCell.CELL_TYPE_STRING:// 取得当前的Cell字符串cellvalue = cell.getStringCellValue().replaceAll("'", "''");break;// 默认的Cell值default:cellvalue = " ";}} else {cellvalue = "";}// 在每个字段之间插入分割符buffer.append(cellvalue).append(EXCEL_LINE_DELIMITER);}// 以字符串返回该行的数据return buffer.toString();}// close函数执行流的关闭操作public void close() {// 如果is不为空,则关闭InputSteam文件输入流if (is != null) {try {is.close();} catch (IOException e) {is = null;}}// 如果reader不为空则关闭BufferedReader文件输入流if (reader != null) {try {reader.close();} catch (IOException e) {reader = null;}}}}7.3.2 ExcelReader的运行效果下面创建一个main函数,用来测试上面的ExcelReader类,代码如下。

java使用POI操作XWPFDocumen创建和读取OfficeWord文档基础篇

java使用POI操作XWPFDocumen创建和读取OfficeWord文档基础篇

java使⽤POI操作XWPFDocumen创建和读取OfficeWord⽂档基础篇注:有不正确的地⽅还望⼤神能够指出,抱拳了⽼铁!参考 API:主要参考⽂章 1:主要参考⽂章 2:主要参考⽂章 3:⼀、基本属性建议⼤家使⽤ office word 来创建⽂档。

(wps 和 word 结构有些不⼀样)IBodyElement ------------------- 迭代器(段落和表格)XWPFComment ------------------- 评论(个⼈理解应该是批注)XWPFSDTXWPFFooter ------------------- 页脚XWPFFootnotes ------------------- 脚注XWPFHeader ------------------- 页眉XWPFHyperlink ------------------- 超链接XWPFNumbering ------------------- 编号(我也不知是啥...)XWPFParagraph ------------------- 段落XWPFPictureData ------------------- 图⽚XWPFStyles ------------------- 样式(设置多级标题的时候⽤)XWPFTable ------------------- 表格⼆、正⽂段落⼀个⽂档包含多个段落,⼀个段落包含多个 Runs,⼀个 Runs 包含多个 Run,Run 是⽂档的最⼩单元获取所有段落:List paragraphs = word.getParagraphs();获取⼀个段落中的所有 Runs:List xwpfRuns = xwpfParagraph.getRuns();获取⼀个 Runs 中的⼀个 Run:XWPFRun run = xwpfRuns.get(index);XWPFRun-- 代表具有相同属性的⼀段⽂本三、正⽂表格⼀个⽂档包含多个表格,⼀个表格包含多⾏,⼀⾏包含多列(格),每⼀格的内容相当于⼀个完整的⽂档获取所有表格:List xwpfTables = doc.getTables();获取⼀个表格中的所有⾏:List xwpfTableRows = xwpfTable.getRows();获取⼀⾏中的所有列:List xwpfTableCells = xwpfTableRow.getTableCells();获取⼀格⾥的内容:List paragraphs = xwpfTableCell.getParagraphs();之后和正⽂段落⼀样注:1. 表格的⼀格相当于⼀个完整的 docx ⽂档,只是没有页眉和页脚。

POIXWPF操作word并操作表格

POIXWPF操作word并操作表格

POIXWPF操作word并操作表格POIXWPF是一种用于操作Microsoft Word文档的Java库。

它提供了丰富的API,方便开发人员对Word文档进行创建、读取、修改和保存等操作。

本文将介绍如何使用POIXWPF来操作Word文档以及表格的相关操作。

一、创建Word文档在使用POIXWPF创建Word文档之前,首先需要添加POIXWPF 的依赖。

在项目中引入相关的jar包后,我们可以使用以下代码来创建一个新的Word文档:```java// 创建一个新的文档XWPFDocument document = new XWPFDocument();// 创建段落XWPFParagraph paragraph = document.createParagraph();// 在段落中添加文本XWPFRun run = paragraph.createRun();run.setText("这是一个POIXWPF创建的Word文档");// 保存文档FileOutputStream out = newFileOutputStream("path/to/document.docx");document.write(out);out.close();```以上代码首先创建了一个新的`XWPFDocument`对象,然后创建了一个段落`XWPFParagraph`,并在段落中添加了文本内容。

最后,通过`FileOutputStream`将文档保存到指定的路径下。

二、操作表格POIXWPF还提供了丰富的API来操作Word文档中的表格。

下面的示例代码演示了如何使用POIXWPF来创建一个简单的表格并填充内容:```java// 创建一个新的文档XWPFDocument document = new XWPFDocument();// 创建表格XWPFTable table = document.createTable(3, 3);// 设置表格样式CTTblPr tablePr = table.getCTTbl().getTblPr();CTTblBorders borders = tablePr.addNewTblBorders();borders.addNewTop().setVal(STBorder.SINGLE);borders.addNewBottom().setVal(STBorder.SINGLE);borders.addNewLeft().setVal(STBorder.SINGLE);borders.addNewRight().setVal(STBorder.SINGLE);// 填充表格内容for (int row = 0; row < 3; row++) {for (int col = 0; col < 3; col++) {XWPFTableCell cell = table.getRow(row).getCell(col);cell.setText("第" + (row + 1) + "行" + "第" + (col + 1) + "列");}}// 保存文档FileOutputStream out = newFileOutputStream("path/to/document.docx");document.write(out);out.close();```以上代码创建了一个3行3列的表格,并在每个单元格中填充了内容。

java使用poi读取ppt文件和poi读取excel、word示例

java使用poi读取ppt文件和poi读取excel、word示例

java使⽤poi读取ppt⽂件和poi读取excel、word⽰例Apache的POI项⽬可以⽤来处理MS Office⽂档,codeplex上还有⼀个它的.net版本。

POI项⽬可创建和维护操作各种基于OOXML和OLE2⽂件格式的Java API。

⼤多数MS Office都是OLE2格式的。

POI通HSMF⼦项⽬来⽀持Outlook,通过HDGF⼦项⽬来⽀持Visio,通过HPBF⼦项⽬来⽀持Publisher。

使⽤POI抽取Word简单⽰例:要引⼊poi-3.7.jat和poi-scratchpad-3.7.ajr这两个包。

复制代码代码如下:package msoffice;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import org.apache.poi.hwpf.HWPFDocument;import org.apache.poi.hwpf.extractor.WordExtractor;import ermodel.CharacterRun;import ermodel.Paragraph;import ermodel.Range;import ermodel.Section;public class Word {// 直接抽取全部内容public static String readDoc1(InputStream is) throws IOException {WordExtractor extractor = new WordExtractor(is);return extractor.getText();}//分章节Section、段落Paragraph、字符串CharacterRun抽取public static void readDoc2(InputStream is) throws IOException {HWPFDocument doc=new HWPFDocument(is);Range r=doc.getRange();for(int x=0;x<r.numSections();x++){Section s=r.getSection(x);for(int y=0;y<s.numParagraphs();y++){Paragraph p=s.getParagraph(y);for(int z=0;z<p.numCharacterRuns();z++){CharacterRun run=p.getCharacterRun(z);String text=run.text();System.out.print(text);}}}}public static void main(String[] args) {File file = new File("/home/orisun/1.doc");try {FileInputStream fin = new FileInputStream(file);String cont = readDoc1(fin);System.out.println(cont);fin.close();fin = new FileInputStream(file);readDoc2(fin);fin.close();} catch (IOException e) {e.printStackTrace();}}}POI抽取PPT⽰例:复制代码代码如下:package msoffice;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import org.apache.poi.hslf.HSLFSlideShow;import org.apache.poi.hslf.extractor.PowerPointExtractor;import org.apache.poi.hslf.model.Slide;import org.apache.poi.hslf.model.TextRun;import ermodel.SlideShow;public class PPT {//直接抽取幻灯⽚的全部内容public static String readDoc1(InputStream is) throws IOException{ PowerPointExtractor extractor=new PowerPointExtractor(is);return extractor.getText();}//⼀张幻灯⽚⼀张幻灯⽚地读取public static void readDoc2(InputStream is) throws IOException{ SlideShow ss=new SlideShow(new HSLFSlideShow(is));Slide[] slides=ss.getSlides();for(int i=0;i<slides.length;i++){//读取⼀张幻灯⽚的标题String title=slides[i].getTitle();System.out.println("标题:"+title);//读取⼀张幻灯⽚的内容(包括标题)TextRun[] runs=slides[i].getTextRuns();for(int j=0;j<runs.length;j++){System.out.println(runs[j].getText());}}}public static void main(String[] args){File file = new File("/home/orisun/2.ppt");try{FileInputStream fin=new FileInputStream(file);String cont=readDoc1(fin);System.out.println(cont);fin.close();fin=new FileInputStream(file);readDoc2(fin);fin.close();}catch(IOException e){e.printStackTrace();}}}Excel⽂件由多个Workbook组成,⼀个Workbook由多个Sheet组成。

JAVA读取word(doc)(docx)标题和内容----POI

JAVA读取word(doc)(docx)标题和内容----POI

JAVA读取word(doc)(docx)标题和内容----POI 1、下载poi的jar包 下载地址:下载解压后⽤到的jar包maven:<!-- https:///artifact/org.apache.poi/poi --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.5.7</version></dependency><!-- https:///artifact/org.apache.poi/poi-ooxml --><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version></dependency><!-- https:///artifact/org.apache.poi/poi-ooxml-schemas --><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>ooxml-schemas</artifactId><version>1.1</version></dependency><!-- https:///artifact/org.apache.poi/poi-scratchpad --><dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>4.1.2</version></dependency>⼀、读取word全部内容(这个不区分doc和docx)1package com.wordcom;23import java.io.File;4import java.io.FileInputStream;5import java.io.InputStream;6import org.apache.poi.POIXMLDocument;7import org.apache.poi.POIXMLTextExtractor;8import org.apache.poi.hwpf.extractor.WordExtractor;9import org.apache.poi.openxml4j.opc.OPCPackage;10import org.apache.poi.xwpf.extractor.XWPFWordExtractor;11/**12 * @Author:hp13 * @Description:14 * @Date:2021年11⽉4⽇14:58:1115 * @Modified by:读取word所有内容16 **/17public class DocUtil {18public static void main(String[] args) {19 String filePath = "C:\\Users\\hp\\Desktop\\新建⽂件夹 (2)\\忻州地调中⼼站11楼机房更换通信电源三措⼀案.docx";20 String content = readWord(filePath);21 System.out.println(content);22 }2324public static String readWord(String path) {25 String buffer = "";26try {27if (path.endsWith(".doc")) {28 InputStream is = new FileInputStream(new File(path));29 WordExtractor ex = new WordExtractor(is);30 buffer = ex.getText();31 ex.close();32 } else if (path.endsWith("docx")) {33 OPCPackage opcPackage = POIXMLDocument.openPackage(path);34 POIXMLTextExtractor extractor = new XWPFWordExtractor(opcPackage);35 buffer = extractor.getText();36 extractor.close();37 } else {38 System.out.println("此⽂件不是word⽂件!");39 }4041 } catch (Exception e) {42 e.printStackTrace();43 }4445return buffer;46 }47 }⼆、获取word各级标题(doc格式)这个需要保证word格式提前定义好标题格式才能读出来1package com.wordcom;2import org.apache.poi.hwpf.HWPFDocument;3import org.apache.poi.hwpf.model.StyleDescription;4import org.apache.poi.hwpf.model.StyleSheet;5import ermodel.Paragraph;6import ermodel.ParagraphProperties;7import ermodel.Range;8import java.io.*;910/**11 * @author hp12 *获取doc⽂档的标题13*/14public class WordTitle {15public static void main(String[] args) throws Exception {1617 String filePath = "C:\\Users\\hp\\Desktop\\新建⽂件夹 (2)\\正⽂查找.doc";18 printWord(filePath);1920 }21public static void printWord(String filePath) throws IOException {2223 InputStream is = new FileInputStream(filePath);2425 HWPFDocument doc = new HWPFDocument(is);2627 Range r = doc.getRange();// ⽂档范围2829for (int i = 0; i < r.numParagraphs(); i++) {3031 Paragraph p = r.getParagraph(i);// 获取段落32int numStyles = doc.getStyleSheet().numStyles();3334int styleIndex = p.getStyleIndex();3536if (numStyles > styleIndex) {3738 StyleSheet style_sheet = doc.getStyleSheet();3940 StyleDescription style = style_sheet.getStyleDescription(styleIndex);41 ParagraphProperties style1 = style_sheet.getParagraphStyle(styleIndex); 4243 String styleName = style.getName();// 获取每个段落样式名称44//System.out.println(style_sheet);45//System.out.println(styleName);46// 获取⾃⼰理想样式的段落⽂本信息47//String styleLoving = "标题";48 String text = p.text();// 段落⽂本49//if (styleName != null && styleName.contains(styleLoving)) {50if (styleName.equals("标题")) {5152 System.out.println(text);53 }54 }55 }56 doc.close();57 }58 }三、按段落读取word(doc)(docx)可以按照⾃⼰的需求提取特定的内容doc1package com.wordcom;2import org.apache.poi.hwpf.HWPFDocument;3import org.apache.poi.hwpf.model.StyleDescription;4import org.apache.poi.hwpf.model.StyleSheet;5import ermodel.Paragraph;6import ermodel.ParagraphProperties;7import ermodel.Range;8import java.io.*;910/**11 *12 * @author hp13 *获取doc⽂档的标题14*/15public class WordTitledoc {16public static void main(String[] args) throws Exception {1718 String filePath = "C:\\Users\\hp\\Desktop\\新建⽂件夹 (2)\\⼀案 .doc";1920 printWord(filePath);2122 }2324public static void printWord(String filePath) throws IOException {2526 InputStream is = new FileInputStream(filePath);2728 HWPFDocument doc = new HWPFDocument(is);2930 Range r = doc.getRange();// ⽂档范围3132for (int i = 0; i < r.numParagraphs(); i++) {3334 Paragraph p = r.getParagraph(i);// 获取段落35int numStyles = doc.getStyleSheet().numStyles();3637int styleIndex = p.getStyleIndex();3839if (numStyles > styleIndex) {4041 StyleSheet style_sheet = doc.getStyleSheet();4243 StyleDescription style = style_sheet.getStyleDescription(styleIndex);44 ParagraphProperties style1 = style_sheet.getParagraphStyle(styleIndex);4546 String styleName = style.getName();// 获取每个段落样式名称47//System.out.println(style_sheet);48//System.out.println(styleName);49// 获取⾃⼰理想样式的段落⽂本信息50//String styleLoving = "标题";51 String text = p.text();// 段落⽂本52//if (styleName != null && styleName.contains(styleLoving)) {53if (text.contains(".") || text.contains("、")) {54//String text = p.text();// 段落⽂本55if (!text.contains(",") && !text.contains(";") && !text.contains("。

POI读取word(word2003和word2007)(转)

POI读取word(word2003和word2007)(转)

POI读取word(word2003和word2007)(转)最近在给客户做系统的时候,⽤户提出需求,要能够导⼊ word ⽂件,现在 microsoft word 有好⼏个版本 97、2003、2007的,这三个版本存储数据的格式上都有相当⼤的差别,⽽现在 97 基本上已经退出市场,⼏乎没有⼈⽤这个版本了,所以在我们的系统中只考虑 2003 版本和 2007 版本的,因为我们只要求能够读取 word 中的⽂字内容即可,其中的⽂字样式、图⽚等信息可以忽略,也不⽤直接操作 word ⽂件,所以我们选择⽤ apache 的 POI 进⾏读取。

读取 2003 版本(.doc)的word⽂件相对来说⽐较简单,只需要 poi-3.5-beta6-20090622.jar 和 poi-scratchpad-3.5-beta6-20090622.jar 两个jar 包即可,⽽ 2007 版本(.docx)就⿇烦多,我说的这个⿇烦不是我们写代码的时候⿇烦,是要导⼊的 jar 包⽐较的多,有如下 7 个之多: 1. openxml4j-bin-beta.jar 2. poi-3.5-beta6-20090622.jar 3. poi-ooxml-3.5-beta6-20090622.jar 4 .dom4j-1.6.1.jar 5. geronimo-stax-api_1.0_spec-1.0.jar 6. ooxml-schemas-1.0.jar 7. xmlbeans-2.3.0.jar 其中 4-7 是 poi-ooxml-3.5-beta6-20090622.jar 所依赖的 jar 包(在poi-bin-3.5-beta6-20090622.tar.gz 中的 ooxml-lib ⽬录下可以找到)。

[java]1. import java.io.File;2. import java.io.FileInputStream;3. import java.io.InputStream;4.5. import org.apache.poi.POIXMLDocument;6. import org.apache.poi.POIXMLTextExtractor;7. import org.apache.poi.hwpf.extractor.WordExtractor;8. import org.apache.poi.openxml4j.opc.OPCPackage;9. import org.apache.poi.xwpf.extractor.XWPFWordExtractor;10.11. /**12. * POI 读取 word 2003 和 word 2007 中⽂字内容的测试类<br />13. * @createDate 2009-07-2514. * @author Carl He15. */16. public class Test {17. public static void main(String[] args) {18. try {19. //word 2003:图⽚不会被读取20. InputStream is = new FileInputStream(new File("c://files//2003.doc"));21. WordExtractor ex = new WordExtractor(is);22. String text2003 = ex.getText();23. System.out.println(text2003);24.25. //word 2007 图⽚不会被读取,表格中的数据会被放在字符串的最后26. OPCPackage opcPackage = POIXMLDocument.openPackage("c://files//2007.docx");27. POIXMLTextExtractor extractor = new XWPFWordExtractor(opcPackage);28. String text2007 = extractor.getText();29. System.out.println(text2007);30.31. } catch (Exception e) {32. e.printStackTrace();33. }34. }35. }如果想下载完整的⽰例代码,可以,这个 rar 包中有 POI 读取word 2003 和 word 2007 所需要的全部 jar 包和 word 2003、word 2007 ⽰例⽂件。

poi操作word文档文件操作

poi操作word文档文件操作
import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
import ermodel.XWPFComment;
import ermodel.XWPFDocument;
public class MyWordExtractor {
public static void main(String[] args) {
File file = new File("E:\\POI\\word\\JBoss3.0 下配置和部署EJB简介.doc");
try {
for(int i=0;i<paragraph.length;i++){
System.out.println("< 第 "+(i+1)+" 段的内容为 >");
System.out.println(paragraph[i]);
}
} catch (FileNotFoundException e) {
comment.getAuthor();//提取批注修改人
comment.getText();//提取批注内容
}
五:利用POI提取Word总页数、总字符数...
97-2003
WordExtractor doc = new WordExtractor(new FileInputStream(filePath));//.doc格式Word文件提取器
//得到.docx文件提取器
org.apache.poi.xwpf.extractor.XWPFWordExtractor docx = new XWPFWordExtractor(POIXMLDocument.openPackage(filePath));

POI操作常用方法

POI操作常用方法

POI操作常用方法POI(Poor Obfuscation Implementation)是一种用于操作Microsoft Office文件的Java库。

它提供了对Excel、Word和PowerPoint等文件的创建、读写和修改的功能。

POI操作常用的方法包括文件的创建、读取和写入、单元格的操作、格式设置、图表的创建和修改等。

1.文件的创建与读取:- 创建一个Excel文件:```Workbook workbook = new XSSFWorkbook(; // 创建一个新的Excel 文件Sheet sheet = workbook.createSheet("Sheet1"); // 创建一个名为Sheet1的工作表```- 读取一个Excel文件:```InputStream inputStream = newFileInputStream("path/to/file.xlsx");Workbook workbook = new XSSFWorkbook(inputStream); // 读取Excel文件Sheet sheet = workbook.getSheetAt(0); // 获取第一个工作表```2.单元格的操作:-创建一个单元格并设置值:```Row row = sheet.createRow(0); // 创建第一行Cell cell = row.createCell(0); // 创建第一列cell.setCellValue("Hello World"); // 设置单元格的值```-获取单元格的值:```Row row = sheet.getRow(0); // 获取第一行Cell cell = row.getCell(0); // 获取第一列String value = cell.getStringCellValue(; // 获取单元格的值```3.格式设置:-设置单元格的样式:```CellStyle style = workbook.createCellStyle(; // 创建样式对象Font font = workbook.createFont(; // 创建字体对象font.setBold(true); // 设置字体为粗体style.setFont(font); // 将字体应用于样式cell.setCellStyle(style); // 将样式应用于单元格```-设置单元格的格式:```DataFormat format = workbook.createDataFormat(; // 创建数据格式对象CellStyle style = workbook.createCellStyle(; // 创建样式对象style.setDataFormat(format.getFormat("#,#.00")); // 设置数据的格式,如数字格式为千分位cell.setCellStyle(style); // 将样式应用于单元格```4.图表的创建与修改:-创建一个柱状图:```Drawing<?> drawing = sheet.createDrawingPatriarch(; // 创建图纸对象ClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 0, 5, 10, 15); // 定义图表的位置和大小Chart chart = drawing.createChart(anchor); // 创建图表对象ChartAxis bottomAxis =chart.getChartAxisFactory(.createCategoryAxis(AxisPosition.BOTTO M); // 创建X轴对象ChartAxis leftAxis =chart.getChartAxisFactory(.createValueAxis(AxisPosition.LEFT); // 创建Y轴对象。

JAVA读取WORD文档解决方案

JAVA读取WORD文档解决方案

JAVA读取WORD文档解决方案在Java中,可以使用Apache POI库来读取和操作Word文档。

Apache POI库提供了一组Java API,用于读取、写入和操作Microsoft Office格式的文件,包括Word文档。

以下是使用Apache POI库来读取Word文档的解决方案:1. 添加依赖:首先,需要在项目中添加Apache POI库的依赖。

可以在maven或gradle构建文件中添加以下依赖:```xml<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version></dependency>```2. 创建文档对象:使用POIXMLDocument类来创建一个XWPFDocument对象,它代表Word文档。

```javaFile file = new File("path/to/word/document.docx");XWPFDocument document = new XWPFDocument(new FileInputStream(file));```3.读取文档内容:通过遍历文档中的段落和表格来读取文档的内容。

```java//遍历段落List<XWPFParagraph> paragraphs = document.getParagraphs(;for (XWPFParagraph paragraph : paragraphs)String text = paragraph.getText(;System.out.println(text);//遍历表格List<XWPFTable> tables = document.getTables(;for (XWPFTable table : tables)List<XWPFTableRow> rows = table.getRows(;for (XWPFTableRow row : rows)List<XWPFTableCell> cells = row.getTableCells(;for (XWPFTableCell cell : cells)String text = cell.getText(;System.out.println(text);}}```4. 关闭文档:在读取完成后,需要关闭XWPFDocument对象来释放资源。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

java用poi实现对word读取和修改操作
新增WordUtil类,将代码拷进去直接运行即可
package com.cjhxfund.ats.fm.instr;
import java.io.FileOutputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import org.apache.poi.POIXMLDocument;
import ermodel.XWPFDocument;
import ermodel.XWPFParagraph;
import ermodel.XWPFRun;
import ermodel.XWPFTable;
import ermodel.XWPFTableCell;
import ermodel.XWPFTableRow;
public class WordUtil {
public static void searchAndReplace(String srcPath, String destPath,
Map<String, String> map) {
try {
XWPFDocument document = new
XWPFDocument(POIXMLDocument.openPackage(srcPath));
// 替换段落中的指定文字
Iterator<XWPFParagraph> itPara =
document.getParagraphsIterator();
while (itPara.hasNext()) {
XWPFParagraph paragraph = (XWPFParagraph) itPara.next();
//String s = paragraph.getParagraphText();
Set<String> set = map.keySet();
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()) {
String key = iterator.next();
List<XWPFRun> runs=paragraph.getRuns();
for (XWPFRun run : runs) {
String text = run.getText(0);
if(text != null){
//String runText = run.toString();
if(text.indexOf(key) != -1){
text = text.replace(key, map.get(key));
System.out.println("key=="+key+"~~~~runText=="+text);
run.setText(text,0);
}
}
}
}
}
// 替换表格中的指定文字
Iterator<XWPFTable> itTable =
document.getTablesIterator();
while (itTable.hasNext()) {
XWPFTable table = (XWPFTable) itTable.next();
int rcount = table.getNumberOfRows();
for (int i = 0; i < rcount; i++) {
XWPFTableRow row = table.getRow(i);
List<XWPFTableCell> cells = row.getTableCells();
for (XWPFTableCell cell : cells) {
for(Entry<String, String> e : map.entrySet()) {
if (cell.getText().equals(e.getKey())) { cell.removeParagraph(0);
cell.setText(e.getValue());
}
}
}
}
}
FileOutputStream outStream = null;
outStream = new FileOutputStream(destPath);
document.write(outStream);
outStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception {
Map<String, String> map = new HashMap<String, String>();
map.put("附件", "文件");
map.put("结果", "结束");
//map.put("金额", "数量");
String srcPath = "D:\\10\\测试java读取【word】文档内容
_V1.0.doc";
String destPath = "D:\\10\\out.doc";
searchAndReplace(srcPath, destPath, map);
}
}。

相关文档
最新文档