依赖

在 pom.xml中增加以下依赖

<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.1</version>
</dependency>

注:很多博客,教我们用以下依赖,是没有XSSF相关内容的

 <dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.14</version>
</dependency>

version 版本

poi的版本可以在 https://mvnrepository.com/artifact/org.apache.poi/poi 进行查询。

找到想要依赖的版本

点击进入后,可以直接复制里面的依赖

初始化

import org.apache.poi.sl.usermodel.SlideShow;
import org.apache.poi.sl.usermodel.SlideShowFactory; SlideShow slideShow = SlideShowFactory.create(new File("./res/1.pptx"));  
  • 如果文件不存在或文件正在使用,create 方法抛出 IOException 异常
  • 如果文件损坏,create 方法抛出 EncryptedDocumentException 异常
  • 返回值 SlideShow 代表整个ppt文档,可以通过 SlieShow.getSlides() 获取每张幻灯片进行操作,以及获取整个ppt的信息,如页面大小(getPageSize, setPageSize),图片数据(getPictureData, setPictureData),字体,输出到流等
  • 通过SlideShow.getSlides()后操作Slide都可以反应到SlideShow。

Slide

  • slide代表幻灯片的一页
  • 也是代表open-xml中  /ppt/sliders/*.xml 中的一个xml文档
  • Slide只有一个实现类 XSLFSlide

获取方法

XSLFSlide未提供public的构造函数,获取只能通过SlideShow中提供的createSlide, getSlides方法获取。

如图:XSLFSlide的构造函数,都是私有的

如图:SlideShow中提供的Slide获取方法, 由于 Slide 接口只有一个实现(XLSFSlide),所以可以直接转换成实现类(XLSFSlide)操作

常用操作

  • 获取所有的备注

XSLFNotes notes = slider.getNotes();
  • 获取所有的批注

List<XSLFComment> comments = slider.getComments();
  • 获取所有的关联部分,包括:备注,批注,图片,图表,母版等
List<POIXMLDocumentPart.RelationPart> relationParts = slider.getRelationParts();
    • 获取备注,批注都是从 getRelationParts中获取的
    • 除了图形的获取,其他元素的获取都可以通过此方法获取(通过遍历判断类型)
  • 获取所有的图形
List<XSLFShape> shapes = slider.getShapes();

POIXMLDocumentPart

POIXMLDocmentPart是一个ppt关联的部分的具体内容,包括:备注、批注、图片、图表、母版等。

通过 POIXMLDocumentPart documentPart = POIXMLDocumentPart.RelationPart.getDocumentPart() 获取。

  • 批注部分, 与 slider.getComments() 对应
if (documentPart instanceof XSLFComments) {
XSLFComments comments1 = (XSLFComments) documentPart;
}
  • 图表部分,有多个,每个图表一个 XSLFChart
if (documentPart instanceof XSLFChart) {
XSLFChart chart = (XSLFChart) documentPart;
}
  • 备注部分, 与 slider.getNotes() 相同
if (documentPart instanceof XSLFNotes) {
XSLFNotes notes1 = (XSLFNotes) documentPart;
}
    • 获取备注的一行文本
// 文本段落,一行为一段
List<List<XSLFTextParagraph>> textParagraphs = notes1.getTextParagraphs();
// 第一行的所有文本,包含文本样式
List<XSLFTextRun> textRuns = textParagraphs.get(0).get(0).getTextRuns();
// 第一行的文本内容
String text = textParagraphs.get(0).get(0).getText();
  • 母版,只有一个
if (documentPart instanceof XSLFSlideLayout) {
XSLFSlideLayout relation1 = (XSLFSlideLayout) documentPart;

XSLFShape

获取 shape 的文本

for (XSLFShape shape : shapes) {
if (shape instanceof XSLFTextShape) {
// 有文本的 sharpe
XSLFTextShape textShape = (XSLFTextShape) shape;
// 文本段落,一行为一段
List<XSLFTextParagraph> textParagraphs = textShape.getTextParagraphs();
// 第一行的所有文本,包含文本样式
List<XSLFTextRun> textRuns = textParagraphs.get(0).getTextRuns();
// 第一行的文本内容
String text = textParagraphs.get(0).getText();
} else if (shape instanceof XSLFGroupShape) {
// 图形组合
XSLFGroupShape groupShape = (XSLFGroupShape) shape;
// 图形组合下的图形,可以与 slider.getShapes() 获取的list一样操作
List<XSLFShape> groupShapeShapes = groupShape.getShapes();
}
}

最新文章

  1. ReactJs 报错 Element type is invalid: expected a string (from built-in components) or a class/function (for composite components) but got: undefined. Check the render method of `Me`.
  2. navicat怎么导出和导入数据表
  3. 交互式makefile
  4. EasyUI 自定义窗口工具
  5. System.Drawing.Design.UITypeEditor自定义控件属性GetEditStyle(ITypeDescriptorContext context),EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
  6. iOSApp -Monkey测试
  7. 【转】Linux I2C设备驱动编写(二)
  8. 获取radio的值
  9. Python开发工具PyCharm个性化设置
  10. vue安装babel依赖报错
  11. Zabbix监控原理及架构
  12. asd短片数篇
  13. 第89节:Java中的反射技术
  14. ElasticSearch(五):Java操作ElasticSearch执行查询
  15. Homebrew macOS 包管理
  16. 奇怪的Excel导入问题,OleDbException (0x80004005): 未指定的错误
  17. element-ui radio 再次点击取消选中
  18. azkaban编译以及安装(调度系统)
  19. mysql5.7 java读取乱码
  20. 如何批量删除SQL注释?

热门文章

  1. Java之Socket与HTTP区别
  2. @loj - 6354@「CodePlus 2018 4 月赛」最短路
  3. POJ2976 题解 0/1分数规划入门题 二分
  4. 2019年ICPC南昌网络赛 J. Distance on the tree 树链剖分+主席树
  5. Logback新版本报no applicable action for [Encoding]问题
  6. windows下检出项目和提交项目
  7. Element-ui学习笔记2
  8. CSS定位方式有哪些?position属性的值有哪些?他们之间的区别是什么?
  9. 2019-1-29-win10-uwp-使用-Microsoft.Graph-发送邮件
  10. java 文件读写工具 FileUtil