Apache POI工具包可用来出来microsoft office办公套件中的Word文档,excel文档,ppt文档以及visio文档等,直接使用maven导入jar包即可使用。

目录

1.处理excel文件

2.处理Word文档


1.处理excel文件

测试类

创建一个普通对象类Person

package com.xiaomifeng1010.beanutils.bean;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;/*** @author xiaomifeng1010* @version 1.0* @date: 2020/4/30 16:31*/@Data
@AllArgsConstructor
@NoArgsConstructor
public class Person {private Integer age;private String name;private String gender;}

测试类,将person对象存放到excel表格中,然后再读取出来

import com.xiaomifeng1010.beanutils.bean.Person;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.junit.Test;import java.io.*;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;/*** @author xiaomifeng1010* @version 1.0* @date: 2020/5/2 16:12*/public class ApachePOIHandleExcleTest {/*** 将person对象存储到excel文件中*/@Testpublic void saveAsExcelTest(){List<Person> persons=new ArrayList<>();persons.add(new Person(12,"Albert","male"));persons.add(new Person(15,"Johnson","male"));persons.add(new Person(22,"Larry","female"));//        创建工作簿对象,excel格式有.xls和.xlsx,xlsx是office 2007以后excel文件默认的扩展名
//        Workbook是一个接口,有两个主要的类HSSFWorkbook和XSSFWorkbook,前者对应.xls格式,后者对应xlsx格式
//        保存在项目对应磁盘下的data目录下try(Workbook wb=new HSSFWorkbook(); OutputStream out=new FileOutputStream(File.separator+"data"+ File.separator+"person.xls",false)){
//            Sheet是工作簿中的工作表,工作簿创建工作表(一个工作簿可以创建多张工作表)Sheet sheet = wb.createSheet();int rowNum=0;
//            Row表示工作表中的一行,从索引0开始创建行,对应excel表格中第一行Row row=sheet.createRow(rowNum);
//            让第一行存放表头(即各属性名称)
//            创建Cell(单元格)对象,存放属性值,单元格的索引也是从0,对应行中第一个单元格row.createCell(0).setCellValue("年龄");row.createCell(1).setCellValue("姓名");row.createCell(2).setCellValue("性别");//            遍历persons集合,将属性存到excel表格中for (int i=0;i<persons.size(); i++){Person person=persons.get(i);row=sheet.createRow(++rowNum);row.createCell(0).setCellValue(person.getAge());row.createCell(1).setCellValue(person.getName());row.createCell(2).setCellValue(person.getGender());}
//            将内容写出wb.write(out);System.out.println("写入文件成功!");} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}/*** 读取excel文件,存放到list中*/@Testpublic void readExcelFileTest(){List<Person> personList=new ArrayList<>();try(Workbook wb=new HSSFWorkbook(new FileInputStream(File.separator+"data"+ File.separator+"person.xls"))){for (Sheet sheet :wb) {Iterator<Row> it = sheet.iterator();while (it.hasNext()) {Row row=it.next();
//                    不获取第一行表头(即每列的标题),因为第一行的列标题(每列标题都是文本型)和表格内容每列的数据类型不同if (row.getRowNum()==0){continue;}int age= (int) row.getCell(0).getNumericCellValue();String name=row.getCell(1).getStringCellValue();String gender=row.getCell(2).getStringCellValue();personList.add(new Person(age,name,gender));}}System.out.println("读取文件到列表list:"+ personList);} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}
}

写入到excel:

在data目录下:

第2个测试方法,读取excel文件内容,以List形式输出,查看输出结果:

2.处理Word文档

Word2007(包括)之后都是docx,遵循XML路线,文档格式公开;Word2007之前的格式是doc,文档格式不公开

处理一下docx格式对象,涉及文字样式,word中的表格,图片,公式

涉及word文档处理的主要类:

• XWPFDocument 整个文档对象
• XWPFParagraph 段落
• XWPFRun 一个片段(字体样式相同的一段)
• XWPFPicture 图片
• XWPFTable 表格

操作docx文档还需要一些额外的jar包

<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.0</version></dependency><!--处理word文档需要的额外的jar包--><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.0</version></dependency><!--处理word文档需要的额外的jar包--><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>4.1.0</version></dependency>

测试写入文本到word文档,用了一首歌词(歌词来自网易云音乐:网易云音乐)

import org.apache.poi.POIDocument;
import org.apache.poi.xwpf.usermodel.ParagraphAlignment;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.junit.Test;import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;/*** @author xiaomifeng1010* @version 1.0* @date: 2020/5/2 17:27*/public class ApachePOIHandleWordTest {/*** 测试写入文本到word文档*/@Testpublic void writeTextToWordFile(){
//        创建文档对象XWPFDocument document = new XWPFDocument();
//        文档写入到哪个文件(项目所在磁盘下的data目录下)try(FileOutputStream fos=new FileOutputStream(File.separator +"data"+File.separator +"test.docx",false)) {
//            添加段落(第一个段落,作为标题)XWPFParagraph titleParagraph=document.createParagraph();
//            设置段落格式居中titleParagraph.setAlignment(ParagraphAlignment.CENTER);
//            生成一个片段(XWPFRun对象定义具有公共属性集的文本区域)XWPFRun titleParagraphRun=titleParagraph.createRun();
//            设置字体titleParagraphRun.setFontFamily("仿宋GB2312", XWPFRun.FontCharRange.eastAsia);
//            设置字体加粗titleParagraphRun.setBold(true);
//            设置字体颜色(黑色)titleParagraphRun.setColor("000000");titleParagraphRun.setFontSize(24);
//            写入文本titleParagraphRun.setText("有人");
//            换行(line feed):使光标下移一行;注意换行要用这个方法,
//            不能使用\n,\n在Word中不起效,并不能换行,只是在ide控制台可以看到换行效果titleParagraphRun.addBreak();
//            回车(carriage return):使光标到行首,对应转义字符\r
//            回车符在word会占据word中的一行,所以不用加上回车符
//            titleParagraphRun.addCarriageReturn();titleParagraphRun.setText("歌手:赵珂");
//            换行titleParagraphRun.addBreak();//            段落(第一段)XWPFParagraph firstParagraph=document.createParagraph();
//            段落设置左对齐
//            firstParagraph.setAlignment(ParagraphAlignment.LEFT);
//            设置居中对齐(歌词)firstParagraph.setAlignment(ParagraphAlignment.CENTER);
//            段落文本区域XWPFRun firstParagraphRun=firstParagraph.createRun();firstParagraphRun.setFontFamily("宋体");
//            第一段文本字体设置为斜体firstParagraphRun.setItalic(true);
//             设置第一段字体颜色(黑色)firstParagraphRun.setColor("000000");firstParagraphRun.setFontSize(15);firstParagraphRun.setTextPosition(2);String content="有人浪迹江湖,有人寒窗苦读;" +"有人阿谀奉承,有人早已麻木;" +"有人嫌贫爱富,有人唯利是图;" +"有人精打细算,有人满不在乎;" +"他们,竖起了耳朵猜喜怒,咧开了笑脸躲城府;" +"不过想在平凡世界里找宝物,才会哭着笑着装糊涂;" +"有人家财万贯却还失声痛哭;" +"有人身无分文却也活的舒服;" +"有人入不敷出半杯酒便再无贪图;" +"有人换了张脸企图脱颖而出;" +"有人躲躲藏藏不想引人注目;" +"有人狰狞面目却还装得衣冠楚楚;" +"" +"有人爱的盲目,有人有眼无珠;" +"有人付之全部,有人一文不出;" +"有人强求幸福,有人庆幸孤独;" +"有人撞破头颅,有人原地踟蹰;" +"我们,瞪大了眼睛猜世故,磨尖了牙齿学谈吐;" +"不过想在平凡世界里找宝物,才会哭着笑着装糊涂;" +"有人家财万贯却还失声痛哭;" +"有人身无分文却也活的舒服;" +"有人入不敷出半杯酒便再无贪图;" +"有人换了张脸企图脱颖而出;" +"有人躲躲藏藏不想引人注目;" +"有人狰狞面目却还装的衣冠楚楚;" +"有人爬上高楼大厦一跃而死;" +"" +"只为让亏欠他的人吃场人命官司;" +"落下时才看见楼里多少难以启齿;" +"有人白天笑脸迎人附炎趋势;" +"只为半夜酒后含泪说的雄心壮志;" +"醒来时再继续对着生活咬牙切齿,日复一日,却不自知;" +"多年后老人看着来时路;" +"有人悔不当初,有人难得糊涂;" +"有人感慨万千,说你我,不过一把土.";
//            去掉多余的空格,并将中文逗号,替换成英文逗号String contentFormat=content.replace(" ","").replace(",",",");
//            按照分号分割字符String[] seperateContent=contentFormat.split(";");for (String finalContent:seperateContent) {
//                一句一句写入firstParagraphRun.setText(finalContent);
//                每写一句,换行firstParagraphRun.addBreak();}
//            System.out.println(contentFormat);
//                 文档内容写入到文件document.write(fos);System.out.println("写入文件成功!");} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}
}

运行测试,输出:

生成文档:

打开文档看一下,标题是加粗的,字体是仿宋GB2312

测试读取word文档内容

/*** 读取word文件内容*/@Testpublic void readWordFileConetent() throws IOException, OpenXML4JException, XmlException {String wordFilePaht="E:\\data\\test.docx";OPCPackage opcPackage = POIXMLDocument.openPackage(wordFilePaht);XWPFWordExtractor xwpfWordExtractor=new XWPFWordExtractor(opcPackage);String wordContentText = xwpfWordExtractor.getText();System.out.println(wordContentText);}
控制台打印内容:

文档处理工具库——Apache POI的使用相关推荐

  1. java 显示word文档_如何通过apache POI技术来读取Word文档,并把Word文档的原来格式完整地显示在html网页?...

    我把代码发到你的邮箱. package com.my.util; import java.io.BufferedWriter; import java.io.File; import java.io. ...

  2. html转换成word文档没有边框,解决 apache poi 转换 word(docx) 文件到 html 文件表格没边框的问题...

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 ${表格匹配信息} 30 31 32 33 ...

  3. 猿创征文|小而巧的API文档生成工具之smart-doc

    文章目录 smart-doc介绍 smart-doc特性 smart-doc的最佳搭档 谁在使用smart-doc smart-doc的优缺点 smart-doc和swagger区别比较 smart- ...

  4. 关于深度学习框架Hamaa与Python API文档生成工具Sophon

    五月两场 | NVIDIA DLI 深度学习入门课程 5月19日/5月26日一天密集式学习  快速带你入门阅读全文> 正文共1988个字,预计阅读时间12分钟. 前言 最近三个月我主要花时间在造 ...

  5. 【项目】好用快搜文档搜索工具

    文章目录 一.项目分析 1.项目调研 2.项目需求 3.开发环境 4.项目知识框架 5.项目实现基本理论 二.项目设计 整体框架设计 代码框架设计 三.项目实现 1.系统工具模块 目录遍历 2.数据库 ...

  6. python文档生成_python文档生成工具:pydoc、sphinx;django如何使用sphinx?

    文档生成工具: 自带的pydoc,比较差 建议使用sphinx 安装: pip install sphinx 安装主题: 由各种主题,我选择常用的sphinx_rtd_theme pip instal ...

  7. QT/C++标签文档报表工具

    QT/C++标签文档报表工具 一.演示预览 二.使用步骤 1.环境配置 二.核心代码 1.报表程序 2. 数据库程序 三.代码链接 一.演示预览 二.使用步骤 1.环境配置 1.第一次在电脑上需要注册 ...

  8. windows下的文档搜索工具

    1.项目背景  在windows下进行磁盘查找速度过慢(可以为文件建立索引来提高查找效率).因此参考everything,借助于数据库,设计一个自己的文档搜索工具. 2.everything原理  E ...

  9. Github每日精选(第5期):文档管理工具paperless-ngx和dzzoffice

    Paperless-ngx Paperless-ngx是一种文档管理系统,它将您的物理文档转换为可搜索的在线档案,因此您可以保留更少的纸张. 部署无纸化的最简单方法是docker compose.do ...

最新文章

  1. 【串讲总结】RNN、LSTM、GRU、ConvLSTM、ConvGRU、ST-LSTM
  2. 十二、linux GPIO初始化
  3. 我的Windows Vista™也装好了...
  4. 在Win平台得到磁盘、CPU、用户信息
  5. mysql 高版本检索外键_第05期:外键到底能不能用?
  6. c 语言教程文档,c语言基本教程
  7. Leaving Auction CF 749D
  8. linux0.11内核视频讲解,linux0.11内核分析-setup
  9. 刀塔霸业android安装包,刀塔霸业安卓下载-刀塔霸业安卓官网版(dota2自走棋)下载v1.0...
  10. SpringBoot使用@Asyn注解注意事项
  11. 云视频会议对初创公司的益处
  12. java.lang.NoClassDefFoundError: org/springframework/core/metrics/ApplicationStartup
  13. 电力职称计算机水平考试题库 2019,2019职称计算机考试Excel练习及答案汇总1
  14. 如何用计算机算十进制,计算器怎么,计算机是怎么转换二进制为十进制的
  15. c语言程序分数化简,【C/C++】分数化简
  16. 图像美学质量评价技术综述
  17. 金融壹账通冲刺港股:9个月亏10亿 半年前刚换帅
  18. You must address the points described in the following [1] lines before starting Elasticsearch.
  19. 高级前端必会手写面试题及答案
  20. 音乐翻唱软件测试初学者,音乐APP听歌识曲大评测,QQ音乐独家“翻唱识别”领跑...

热门文章

  1. mysql的备份与恢复_实验十一 MySQLl备份与恢复1
  2. 计算机课平时成绩重要吗,大学计算机基础课程平时成绩评定方法的研究.pdf
  3. asp转php后数据库连接代码,ASP_asp 数据库连接函数代码,以下是SQL连接代码: 复制代码 - phpStudy...
  4. catti二级笔译综合能力真题_2006年-2011年CATTI二级笔译综合能力试题及答案2018年.doc...
  5. python 保留顺序去重_Python入门很简单,只要掌握3456点
  6. initlistpython_python --(链表)
  7. 洛谷——P1008 [NOIP1998 普及组] 三连击
  8. 关于使用MYSQL出现的内存泄漏问题
  9. Angular 自定义分页组件,自定义每页显示个数
  10. yii2 提供接口给java_Yii2 基于RESTful架构的 advanced版API接口开发 配置、实现、测试 (转)...