1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > java读取doc docx ppt pptx xls xlsx格式的文件

java读取doc docx ppt pptx xls xlsx格式的文件

时间:2024-01-08 21:09:45

相关推荐

java读取doc docx ppt pptx xls xlsx格式的文件

前言:

通常我们用apache 的POI库对以上文档进行操作,apache POI官网

apache POI官网

这里推荐到官网下载导入到项目,maven下载的它会缺少几个包。

格式上后缀带x(docx、pptx、xlsx)是不带x(doc、ppt、xls)的拓展,在体积更小,功能更强,安全性更高,如果用不带x格式强制打开带x格式的,可能会丢失少量数据,因此,poi在操作这俩类文件时,是用不同系列的包的,注意,文件本身是什么格式的,就是什么格式的,不可以去解析那些通过修改文件后缀名格式的文件( 比如原本你的文件是doc格式,你强制修改后缀为docx,那么这时你是无法用docx的包去解析该文件的)。

word文件读取

从下图中可以看到,如果用doc处理方法去处理docx文档,它会告诉你该文档本身是ooxml文档,即docx文档,无法处理

public static String readDoc(String path) throws Exception {StringBuffer content = new StringBuffer("");// 文档内容HWPFDocument doc = new HWPFDocument(new FileInputStream(path));Range range = doc.getRange();int paragraphCount = range.numParagraphs();// 段落for (int i = 0; i < paragraphCount; i++) {// 遍历段落读取数据Paragraph pp = range.getParagraph(i);content.append(pp.text());}return content.toString().trim();}

从下图中我们可以看到,用解析doc的包解析docx会报错,官方提示你可以用HSSF的包来解析docx,这里我们用另一高效的处理类(ooxml)来处理docx格式,当然,该类目前还不成熟和稳定。

//docx格式,主要用ooxml包读取public static String readDocx(String path) throws Exception {XWPFDocument xdoc = new XWPFDocument(new FileInputStream(path));XWPFWordExtractor extractor = new XWPFWordExtractor(xdoc);String doc1 = extractor.getText();return doc1;}

PowerPoint文件读取

读取ppt 这里只简单读取一些文本内容,主要使用HSLFSlideShow、HSLFSlide 类

public static String readPPT(String path) throws Exception {/*//创建ppt文件HSLFSlideShow ppt = new HSLFSlideShow();//创建幻灯片HSLFSlide s1 =ppt.createSlide();FileOutputStream out = new FileOutputStream("D:\\slideshow.ppt");ppt.write(out);out.close();*//*HSLFSlideShow ppt = new HSLFSlideShow(newHSLFSlideShowImpl("slideshow.ppt"));//查看每张幻灯片大小java.awt.Dimension pgsize =ppt.getPageSize();int pgx = pgsize.width; //slide widthint pgy = pgsize.height; //slide height//修改每张幻灯片大小ppt.setPageSize(new java.awt.Dimension(1024, 768));//保存FileOutputStream out = new FileOutputStream("slideshow.ppt");ppt.write(out);out.close();*/StringBuffer content = new StringBuffer("");// 文档内容HSLFSlideShow ppt = new HSLFSlideShow(new HSLFSlideShowImpl(path));// 获取幻灯片for (HSLFSlide slide : ppt.getSlides()) {//得到每张幻灯片中所有元素for (HSLFShape sh : slide.getShapes()){// 形状名称String name = sh.getShapeName();// 在这个幻灯片中的形状的锚位置Rectangle2D anchor = sh.getAnchor();if (sh instanceof Line) {// 在行间Line line = (Line) sh;content.append(line.getText());} else if (sh instanceof HSLFAutoShape) {// 在自动填充区域内HSLFAutoShape shape = (HSLFAutoShape) sh;content.append(shape.getShapeName());} else if (sh instanceof HSLFTextBox) {// 在文本框中HSLFTextBox shape =(HSLFTextBox) sh;content.append(shape.getText());} else if (sh instanceof HSLFPictureShape) {// 在图片中HSLFPictureShape shape =(HSLFPictureShape) sh;content.append(shape.getShapeName());}}}return content.toString();}

pptx的格式原本是可以用XSLFPowerPointExtractor提取器读取的,但是现在该类已经被废弃了,因此我们使用XMLSlideShow、XSLFSlide 类来直接读取

需导入的额外导入的maven库:

<dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>28.0-jre</version></dependency>

public static String readPPTX(String path) throws Exception {//创建一个新的空幻灯片XMLSlideShow ppt = new XMLSlideShow(new FileInputStream(path));// 拼接字符串StringBuilder ret = new StringBuilder();// 第一张幻灯片XSLFSlide slide = ppt.getSlides().get(0);int currCha = -1;int count = 1;String title = null;boolean firstLine = true;for (XSLFShape shape : slide.getShapes()) {if (shape instanceof XSLFTextShape) {XSLFTextShape textShape = (XSLFTextShape) shape;String text = textShape.getText();try {currCha = Integer.parseInt(text);if (currCha >= 0 && title != null) {ret.append("# ").append(currCha).append('.').append(title).append('\n');}continue;} catch (Exception ex) {}for (String line : Splitter.on("\n").omitEmptyStrings().trimResults().split(text)) {if (firstLine) {title = line;firstLine = false;} else {ret.append(count).append(". ").append(line).append('\n');count++;}}}}return ret.toString();}

excel文件读取

excel文件读写就比较容易了,这里不再赘述,可以参考这个人博客

excel文件读写

参考博客:

java读取txt/pdf/xls/xlsx/doc/docx/ppt/pptx

Java读取pptx

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