Java poi之Excel文本图片内容提取

这篇具有很好参考价值的文章主要介绍了Java poi之Excel文本图片内容提取。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

Java poi之Excel文本图片内容提取

应公司需求,需实现以下功能

  1. Excel文本内容的替换;
  2. Excel文本内容的提取;
  3. Excel中图片的提取存放

此文章将使用Apache POI实现Excel文件中文本内容及图片的提取;

Apache POI 是基于 Office Open XML 标准(OOXML)和 Microsoft 的 OLE 2 复合文档格式(OLE2)处理各种文件格式的开源项目。 简而言之,您可以使用 Java 读写 MS Excel 文件,可以使用 Java 读写 MS Word 和 MS PowerPoint 文件。

  • HSSF - 提供读写 Microsoft Excel XLS 格式 (Microsoft Excel 97 (-2003)) 档案的功能。
  • XSSF - 提供读写 Microsoft Excel OOXML XLSX 格式 (Microsoft Excel XML (2007+)) 档案的功能。
  • SXSSF - 提供低内存占用量读写 Microsoft Excel OOXML XLSX 格式档案的功能。
  • HWPF - 提供读写 Microsoft Word DOC97 格式 (Microsoft Word 97 (-2003)) 档案的功能。
  • XWPF - 提供读写 Microsoft Word DOC2003 格式 (WordprocessingML (2007+)) 档案的功能。
  • HSLF/XSLF - 提供读写 Microsoft PowerPoint 格式档案的功能。
  • HDGF/XDGF - 提供读 Microsoft Visio 格式档案的功能。
  • HPBF - 提供读 Microsoft Publisher 格式档案的功能。
  • HSMF - 提供读 Microsoft Outlook 格式档案的功能。

文档准备

小编准备了以下两个文件:《excel03.xls》《excel07.xlsx》,分别代表不同版本的Excel,里边记录了一些正常表格信息及合并后的单元格信息和图片,以便提取测试,如下图
Java poi之Excel文本图片内容提取

引入Maven依赖

<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>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-scratchpad</artifactId>
    <version>4.1.2</version>
</dependency>

代码块

package com.bjzaxk.utils;

import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ooxml.POIXMLDocumentPart;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.xssf.usermodel.*;

import java.io.*;
import java.util.List;

public class Demo {
    public static void main(String[] args) {
        String filePath = "C:\\Users\\Administrator\\Desktop\\java_poi\\demo_file\\excel03.xls";
        String formart = "XLS";
//        String filePath = "C:\\Users\\Administrator\\Desktop\\java_poi\\demo_file\\excel07.xlsx";
//        String formart = "XLSX";
        // 文本提取后存放路径及文件名
        String extractFilePath = "C:\\Users\\Administrator\\Desktop\\java_poi\\demo_file\\excel03.txt";
//        String extractFilePath = "C:\\Users\\Administrator\\Desktop\\java_poi\\demo_file\\excel07.txt";
        // 图片提取后存放路径
        String imageFilePath = "C:\\Users\\Administrator\\Desktop\\java_poi\\demo_file\\";

        // 提取Excel中的文字
        excelTextExtract(filePath, formart, extractFilePath);
        // 提取Excel中的图片
        excelImageExtract(filePath, formart, imageFilePath);
    }

    /**
     * @description: 提取excel文件中的文字
     * @author: Mr.Jkx
     * @time: 2023/1/11 17:30
     */
    public static void excelTextExtract(String filePath, String formart, String extractFilePath) {
        StringBuffer stringBuffer = new StringBuffer();
        FileInputStream fileInputStream = null;
        try {
            // 1.获取工作薄
            fileInputStream = new FileInputStream(filePath);
            if (formart.equals("XLS")) {
                // 2.创建工作区workbook
                HSSFWorkbook workbook = new HSSFWorkbook(fileInputStream);
                // 3.获取表sheet,这里sheet0代表获取下表为0的excel表,也就是第一个表
                HSSFSheet sheet = workbook.getSheetAt(0);
                // 4.获取数据
                for (int i = 0; i <= sheet.getLastRowNum(); i++) {
                    // 获取第i行的数据
                    HSSFRow row = sheet.getRow(i);
                    for (int j = 0; j < row.getLastCellNum(); j++) {
                        // 获取第i行第j列的单元格数据
                        String cell = row.getCell(j).toString();
                        stringBuffer.append(cell).append(" | ");
                    }
                    // 拼接换行符
                    stringBuffer.append("\n");
                }
            } else if (formart.equals("XLSX")) {
                // 创建工作区workbook
                XSSFWorkbook workbook = new XSSFWorkbook(fileInputStream);
                // 3.获取表sheet,这里sheet0代表获取下表为0的excel表,也就是第一个表
                XSSFSheet sheet = workbook.getSheetAt(0);
                // 4.获取数据
                for (int i = 0; i <= sheet.getLastRowNum(); i++) {
                    // 获取第i行的数据
                    XSSFRow row = sheet.getRow(i);
                    for (int j = 0; j < row.getLastCellNum(); j++) {
                        // 获取第i行第j列的单元格数据
                        String cell = row.getCell(j).toString();
                        stringBuffer.append(cell).append(" | ");
                    }
                    // 拼接换行符
                    stringBuffer.append("\n");
                }
            }

            // 获取到的数据
            if (stringBuffer.length() > 0) {
                // 创建存放提取数据的文件
                FileWriter fw = new FileWriter(extractFilePath);
                BufferedWriter bw = new BufferedWriter(fw);
                // 将内容写入新文件中
                bw.write(stringBuffer.toString());
                bw.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fileInputStream != null) {
                try {
                    // 6.关闭资源
                    fileInputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                    System.out.println("读取Excel文件失败...");
                }
            }
        }
    }

    /**
     * @description: 提取execl文件中的图片
     * @author: Mr.Jkx
     * @time: 2023/1/11 17:31
     */
    public static void excelImageExtract(String filePath, String formart, String imageFilePath) {
        try {
            InputStream inp = new FileInputStream(filePath);
            if (formart.equals("XLS")) {
                HSSFWorkbook workbook = (HSSFWorkbook) WorkbookFactory.create(inp);
                List pictures = workbook.getAllPictures();
                HSSFSheet sheet = workbook.getSheetAt(0);
                for (HSSFShape shape : sheet.getDrawingPatriarch().getChildren()) {
                    if (shape instanceof HSSFPicture) {
                        HSSFPicture pic = (HSSFPicture) shape;
                        int pictureIndex = pic.getPictureIndex() - 1;
                        HSSFPictureData picData = (HSSFPictureData) pictures.get(pictureIndex);
                        // 保存图片到指定路径
                        byte[] data = picData.getData();
                        FileOutputStream out = new FileOutputStream(imageFilePath + "excel03_" + System.currentTimeMillis() + ".jpg");
                        out.write(data);
                        out.close();
                    }
                }
            } else if (formart.equals("XLSX")) {
                XSSFWorkbook workbook = (XSSFWorkbook) WorkbookFactory.create(inp);
                XSSFSheet sheet = workbook.getSheetAt(0);
                for (POIXMLDocumentPart part : sheet.getRelations()) {
                    if (part instanceof XSSFDrawing) {
                        XSSFDrawing pic = (XSSFDrawing) part;
                        List<XSSFShape> shapes = pic.getShapes();
                        for (XSSFShape shape : shapes) {
                            XSSFPicture picture = (XSSFPicture) shape;
                            byte[] data = picture.getPictureData().getData();
                            FileOutputStream out = new FileOutputStream(imageFilePath + "excel07_" + System.currentTimeMillis() + ".jpg");
                            out.write(data);
                            out.close();
                        }
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

提取结果验证

  • 提取文本会存放于一个txt文件中(小编工作需求,其他类型文件未尝试!);
  • 提取的图片会存放于“imageFilePath ”路径中,准备的文档中只有一张图片,多张图片的情况下,提取完成会在存放路径中有多张图片(在此不再展示);
  • 提取过程中不会改变原本Excel内容;
excel03.xls 提取结果

Java poi之Excel文本图片内容提取

excel07.xlsx 提取结果

Java poi之Excel文本图片内容提取文章来源地址https://www.toymoban.com/news/detail-447402.html

到了这里,关于Java poi之Excel文本图片内容提取的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 小程序内容安全检测校验文本/图片违规

    小程序内容安全检测校验文本/图片违规

    最近微信小程序遇到内容安全检测接口校验文本/图片是否含有敏感内容。 其实一开始真的很懵逼,为什么会遇到这种问题,原来现在我们所上传的图片、文本需要经过规定合法合规才能上传。比如说是色情、低俗,违法政治言论等。也许我们平常在开发的时候和运营的时候

    2024年02月13日
    浏览(10)
  • React实现文本框输入文字内容动态给图片添加文字信息(多个)并生成新的图片

    React实现文本框输入文字内容动态给图片添加文字信息(多个)并生成新的图片

    收到这个需求的时候,我的内心是崩溃的,脑子里已经跑过一万匹草泥马,内心想这种事为啥不交给ps去做,哪怕是手机里图片编辑也可以做到吧,专业的事交给专业的工具去干不就好了,何必出这种XX需求。后来想想就释然了,反正拿钱干活,干啥不是干,只要给钱,再XX的

    2024年02月06日
    浏览(12)
  • 项目接入阿里云内容审核增强版本,文本审核与图片审核。第三方审核

    项目接入阿里云内容审核增强版本,文本审核与图片审核。第三方审核

            自己的项目新增了一个社区的服务,社区可以发布文章,浏览文章,类似一些平台的文章管理的功能。那么发布的文章肯定是需要审核的,但是又不能全部为人工审核,这样的话效率太低也忙不过来,所以就想着先引入一个自动审核,只有当自动审核不通过之后,

    2024年02月02日
    浏览(22)
  • uni-sec-check内容安全unicloud公共模块,校验微信小程序文本内容安全识别和图片智能鉴黄,uniapp进阶

    uni-sec-check内容安全unicloud公共模块,校验微信小程序文本内容安全识别和图片智能鉴黄,uniapp进阶

    uni-sec-check内容安全是unicloud封装了微信小程序的免费接口,文本内容安全识别(msgSecCheck)和音视频内容安全识别(mediaCheckAsync),如果我没选择使用uniapp+unicloud开发的话,可以轻松从插件市场引入uni-sec-check公共模块,完成内容安全检测,包含图片和文字检测,下面就针对文

    2024年02月04日
    浏览(9)
  • 【itext7】itext7操作PDF文档之添加段落文本内容、添加List列表、添加Image图片、添加Table表格

    【itext7】itext7操作PDF文档之添加段落文本内容、添加List列表、添加Image图片、添加Table表格

    这篇文章,主要介绍itext7操作PDF文档之添加段落文本内容、添加List列表、添加Image图片、添加Table表格。 目录 一、itext7操作PDF内容 1.1、添加段落文本内容 1.2、添加列表内容 1.3、添加图片 1.4、添加表格 (1)列宽采用点单位(pt点单位) (2)采用百分比单位(%百分比) it

    2024年02月16日
    浏览(8)
  • JAVA PDF 给PDF添加文字/图片水印(指定内容),并且设置位置

    JAVA PDF 给PDF添加文字/图片水印(指定内容),并且设置位置

    提示:看完这个简单的demo 后就知道怎样去操作一个PDF了 文章目录 前言 一、前提准备 二、使用步骤 1.引入库 2.以下是部分代码的作用 总结 提示:操作PDF其实是一件很简单的事情,比一般的CRUD都简单 例如:我们拿到了一个需求,我需要给这个PDF设置一个 电子签名 ( 就是一

    2024年04月23日
    浏览(16)
  • Java POI导出富文本的内容到word文档

    当创建使用富文本编辑器,操作完的数据,传输到后台都是带有html标签的。 如:h1标题头/h1h2第二个标题/h2a href=\\\"www.baidu.com\\\"百度搜索/a 我们想把富文本数据转换为Word内容。 Word是完全支持html标签的,但是我们获取到的富文本内容并不是完整的html代码,所有我们需要先补全

    2024年02月09日
    浏览(11)
  • 体验Semantic Kernel图片内容识别

    体验Semantic Kernel图片内容识别

        前几日在浏览devblogs.microsoft.com的时候,看到了一篇名为Image to Text with Semantic Kernel and HuggingFace的文章。这篇文章大致的内容讲的是,使用 Semantic Kernel 结合 HuggingFace 来实现图片内容识别。注意,这里说的是图片内容识别,并非是 OCR ,而是它可以大致的描述图片里的主要

    2024年04月08日
    浏览(10)
  • 阿里云内容审核服务使用(图片审核)

    阿里云内容审核服务使用(图片审核)

    说明:在项目中,我们经常会对用户上传的内容(如文字、图片)等资源内容进行审核,审核包括两方面,一方面是内容与描述不符,一方面是违反法律法规。本文介绍使用阿里提供的内容审核服务,对图片内容进行审核。 第一步:打开官网 进入阿里云官网,在搜索框内输

    2024年02月13日
    浏览(7)
  • 手机怎么识别图片内容?简单几步轻松解决

    手机怎么识别图片内容?简单几步轻松解决

    由于现在手机越来越智能,很多没见过的物品也不用去描述形容去搜索是什么,直接使用手机来扫描识别查询,比如我们平时在一些购物平台购买一些衣服裤子,不知道是什么品牌和型号,我们直接添加对应的图片,上传之后就能搜寻出商品信息、图片以及商家信息。那么有

    2024年02月13日
    浏览(7)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包