首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

获取excel文件中的图像大小(高度和宽度),而不是使用Apache POI时的原始大小(对于xls和xlsx文件)

获取Excel文件中的图像大小(高度和宽度),而不是使用Apache POI时的原始大小(对于xls和xlsx文件),可以通过以下步骤实现:

  1. 使用Apache POI库加载Excel文件,可以使用POIFSFileSystem类或XSSFWorkbook类,具体取决于文件的格式(xls或xlsx)。
  2. 遍历Excel文件中的每个工作表(Sheet)。
  3. 对于每个工作表,使用Sheet类的getDrawingPatriarch()方法获取图纸(Drawing)对象。如果图纸对象为空,则表示该工作表中没有图像。
  4. 对于每个图纸对象,使用getShapes()方法获取所有形状(Shape)的列表。
  5. 遍历形状列表,筛选出类型为Picture的形状。
  6. 对于每个图片形状,使用Picture类的getClientAnchor()方法获取图像的位置和大小信息。
  7. 通过ClientAnchor类的getRow1()、getRow2()、getCol1()和getCol2()方法获取图像所占据的单元格范围。
  8. 根据单元格范围计算图像的高度和宽度,可以使用以下公式: 高度 = (getRow2() - getRow1() + 1) * 单元格高度 宽度 = (getCol2() - getCol1() + 1) * 单元格宽度
  9. 将图像的高度和宽度记录下来,可以存储在一个数据结构中,如列表或映射。

以下是一个示例代码片段,演示如何获取Excel文件中图像的大小:

代码语言:txt
复制
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFPictureData;
import org.apache.poi.xssf.usermodel.XSSFPictureData;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class ExcelImageSizeExtractor {
    public static void main(String[] args) {
        String filePath = "path/to/excel/file.xlsx";
        List<ImageSize> imageSizes = getImageSizes(filePath);
        
        for (ImageSize imageSize : imageSizes) {
            System.out.println("Image Size - Width: " + imageSize.getWidth() + ", Height: " + imageSize.getHeight());
        }
    }
    
    public static List<ImageSize> getImageSizes(String filePath) {
        List<ImageSize> imageSizes = new ArrayList<>();
        
        try (Workbook workbook = getWorkbook(filePath)) {
            for (Sheet sheet : workbook) {
                Drawing<?> drawing = sheet.getDrawingPatriarch();
                
                if (drawing != null) {
                    for (Shape shape : drawing) {
                        if (shape instanceof Picture) {
                            Picture picture = (Picture) shape;
                            ClientAnchor anchor = picture.getClientAnchor();
                            
                            int row1 = anchor.getRow1();
                            int row2 = anchor.getRow2();
                            int col1 = anchor.getCol1();
                            int col2 = anchor.getCol2();
                            
                            int height = (row2 - row1 + 1) * sheet.getDefaultRowHeight();
                            int width = (col2 - col1 + 1) * sheet.getColumnWidth(col1);
                            
                            imageSizes.add(new ImageSize(width, height));
                        }
                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        
        return imageSizes;
    }
    
    private static Workbook getWorkbook(String filePath) throws IOException {
        FileInputStream fileInputStream = new FileInputStream(filePath);
        
        if (filePath.endsWith(".xls")) {
            return new HSSFWorkbook(fileInputStream);
        } else if (filePath.endsWith(".xlsx")) {
            return new XSSFWorkbook(fileInputStream);
        }
        
        throw new IllegalArgumentException("Unsupported file format");
    }
    
    private static class ImageSize {
        private int width;
        private int height;
        
        public ImageSize(int width, int height) {
            this.width = width;
            this.height = height;
        }
        
        public int getWidth() {
            return width;
        }
        
        public int getHeight() {
            return height;
        }
    }
}

请注意,上述示例代码仅适用于获取Excel文件中的图像大小,而不是使用Apache POI时的原始大小。对于其他问题或需求,可能需要使用不同的方法或库来解决。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Java进阶-常用Excel处理库比较

2、Apache POI 功能支持读写Excel文件:可以创建新或处理现有的Excel文件。支持公式计算:自动计算更新Excel公式。...下面是一个使用Apache POIExcel文件创建图表示例代码。此例我们将创建一个简单柱状图,展示两组数据对比。import org.apache.poi.ss.usermodel....这个库虽然功能不如Apache POI丰富,但在处理小型或中等复杂度Excel文件,它轻量级特性确保了快速执行效率较低资源消耗。...2、SimpleXLSX 功能支持读写.xlsx文件:支持基本Excel文件创建和编辑。基本单元格操作:允许用户进行单元格读写,包括设置值获取值。...尽管它功能比Apache POI简单,但在处理不需要复杂格式图表小型数据文件,它性能资源消耗都很理想。

42233

EasyExcel与POI对比及实现百万数据导入导出基础示例

相较于传统Apache POI等库,EasyExcel在设计上注重性能优化降低内存开销,特别是在处理包含大量数据Excel文件表现突出。 核心特点与原理: 1....高性能与低内存占用: - EasyExcel采用逐行读写方式处理Excel文件不是一次性加载整个文件到内存,这样能够有效避免处理大型文件出现内存溢出问题。...Apache POI 是一套 Java API,专门用来处理 Microsoft Office 格式文件,特别是对于 Excel (.xls, .xlsx), Word (.doc, .docx),...读写功能: - Apache POI 提供了丰富 API 来读取创建这些文件格式,允许 Java 开发者直接在代码打开、修改保存 Office 文档,不需启动实际 Office 应用程序...尤其是处理大数据量 Excel 文件POI 通常建议采用流式处理(Streaming User Model)以降低内存消耗,即逐行读写数据不是一次性加载所有数据到内存

1.9K10
  • Python操作Excel工作簿示例代码(*.xlsx)

    我也是在写这篇总结之前才发现,一个空 .xlsx 格式文件大小有 7KB,一个空 .xls 格式文件大小有 24KB,当我分别写入一个相同汉字后,两个文件大小变成了 10KB 30KB,...Excel保留原有的格式,但是这是相对于 .xls 格式文件对于 .xlsx 格式文件直接跑出异常 raise NotImplementedError(“formatting_info=True...= 64 # 指定单元格高度宽度自适应 cell.columns.autofit() cell.rows.autofit() # 再次打印当前格子高度宽度 print("cell.width...没有直接方法 支持 支持 另存后大小 .xls 文件没有变化 .xlsx 文件会变小 .xls、.xlsx 文件没有变化 使用建议 只操作.xls文件可以考虑 只操作.xlsx文件可以考虑,不能带有宏...一个比较好选择,使用时感觉速度稍微有点慢 总结 Excel 表格程序经过版本更替发生了很大变化,出现了相同内容 .xls 比 .xlsx 格式文件大很多情况 基于上一点考虑,如果能使用新版表格

    2.6K30

    Excel大批量数据导入导出,如何做优化?

    POI坑,以及分别对于xlsxlsx文件怎么优化大批量数据导入导出。...想了解的话可以看看Excel XLS文件格式 XLSX 07版XLSX则是采用OOXML(Office Open Xml)格式存储数据。简单来说就是一堆xml文件用zip打包之后文件。...并且在POIExcel抽象,每一行,每一个单元格都是一个对象。当文件大,数据量多时候对内存占用可想而知。...XLSX POIXLSX支持Event ModelEvent User Model XLSXEvent Model 使用 官网例子: http://svn.apache.org/repos/asf...原理 这里涉及BIFF8格式以及POI对其封装,大家可以了解一下(因为其格式比较复杂,我也不是很清楚) 总结 POI优化了对XLSX大批量写,以及支持对XLSXLSXSAX读,我们在实际开发需要根据业务量来选择正确处理

    3.6K11

    POI 如何处理 Excel 大批量数据导入导出?

    概要 Java对Excel操作一般都是用POI,但是数据量大的话可能会导致频繁FGC或OOM,这篇文章跟大家说下如果避免踩POI坑,以及分别对于xlsxlsx文件怎么优化大批量数据导入导出。...想了解的话可以看看Excel XLS文件格式 XLSX 07版XLSX则是采用OOXML(Office Open Xml)格式存储数据。简单来说就是一堆xml文件用zip打包之后文件。...并且在POIExcel抽象,每一行,每一个单元格都是一个对象。当文件大,数据量多时候对内存占用可想而知。...XLSX POIXLSX支持Event ModelEvent User Model XLSXEvent Model 使用 官网例子: http://svn.apache.org/repos/asf...原理 这里涉及BIFF8格式以及POI对其封装,大家可以了解一下(因为其格式比较复杂,我也不是很清楚) 总结 POI优化了对XLSX大批量写,以及支持对XLSXLSXSAX读,我们在实际开发需要根据业务量来选择正确处理

    4.8K21

    POI操作Excel入门案例(Spring boot)

    一、简介 Apache POIApache软件基金会免费开源跨平台 Java API,POI提供API给Java程序对Microsoft Office格式(Excel、WORD、PowerPoint...、Visio等)读功能。....二、POI结构说明 HSSF:提供读写Microsoft Excel XLS格式档案功能。 XSSF:提供读写Microsoft Excel OOXML XLSX格式档案功能。...>3.8 2、Demo1:生成EXCEL表格 一个入门小Demo,将文件放在桌面或者指定绝对路径,文件名称为testexcel.xls文件,即可;...文件 3、Demo2:导入EXCEL表格 从本地导入EXCEL表格内容,并将结果封装到List集合,为了方便阅读,这里把异常都抛出,实际情况下,应该对异常进行捕获,并进行处理; import

    50710

    如何高效导出 百万级别的数据量 到 Excel

    可以使用 Apache POI SXSSFWorkbook 类,它采用了基于流方式进行数据写入,可以避免内存溢出问题,提高写入效率。...这样可以避免写入效率较低问题,并减少对内存占用,提高写入效率。 将数据按列进行写入,不是按行进行写入。这样可以减少写入数据需要移动光标的次数,提高写入效率。...基于 Apache POI 方式。 Apache POI 是一个开源 Java 库,提供了读写 Excel 文件 API,支持多种文件格式,包括 XLS XLSX 格式。...EasyExcel 是一个基于 Apache POI 封装 Java 库,提供了更加简单易用 API,支持读写多种文件格式,包括 XLSXLSX CSV 格式。...当缓存达到一定大小后,再一次性将数据写入 Excel 文件,可以避免频繁 I/O 操作。 使用多线程或异步方式。对于大规模数据量写入,可以使用多线程或异步方式来提高程序效率。

    45510

    Apache POI使用详解

    一 :简介 开发中经常会设计到excel处理,如导出Excel,导入Excel到数据库,操作Excel目前有两个框架,一个是apache poi, 另一个是 Java Excel Apache...是一开放源码项目,通过它Java开发人员可以读取Excel文件内容、创建新Excel文件、更新已经存在Excel文件。...jxl 由于其小巧 易用特点, 逐渐已经取代了 POI-excel地位, 成为了越来越多java开发人员生成excel文件首选。...由于apache poi 在项目中用比较多,本篇博客只讲解apache poi,不讲jxl 二:Apache POI常用类 HSSF - 提供读写Microsoft Excel XLS格式档案功能...HSMF - 提供读Microsoft Outlook格式档案功能。 在开发我们经常使用HSSF用来操作Excel处理表格数据,对于其它不经常使用

    4.2K10

    Apache POI与easyExcel:Excel文件导入导出技术深度分析

    它提供了对Excel文件读写操作全面支持,在处理Excel文件POI通过HSSFXSSF两个子项目分别支持.xls.xlsx格式。...在导入Excel文件Apache POI会将整个文件加载到内存,然后提供API来访问操作文件各个元素,如单元格、行、列等。...1.1 POI实现读取excel 下面是一演示如何使用 Apache POI 导入(读取)导出(写入)Excel 文件(.xlsx 格式) org.apache.poi...1.2 poi实现写入excel使用Apache POI写入.xlsx格式Excel文件,您需要创建一个XSSFWorkbook对象来表示整个工作簿,然后在其中创建XSSFSheet对象来表示工作表...EasyExcel 是在在POI解析引擎基础上改进,但并没有完全重写 Apache POI 整个解析引擎,特别是对于 XLSX 文件格式(即 Excel 2007 及以上版本所使用格式,POI

    1.2K20

    手把手教你JSON解析完Cube数据,如何输出到Excel

    元素,并将其输出到 Excel 文件。...可能熟悉Java朋友能马上想起来 POI poi 组件是由Apache提供组件包,主要职责是为我们Java程序提供对于office文档相关操作。...到目前为止,Hutool-poi支持: Excel文件xls, xlsx读取(ExcelReader) Excel文件xlsxlsx写出(ExcelWriter) 如果我们想要输出...Excel,推荐引入poi-ooxml,这个包会自动关联引入poi包,且可以很好支持Office2007+文档格式 org.apache.poi<...这里我们打开 outToExcel.xlsx 文件,看下效果。 ? 小结 本篇博客,博主主要为大家介绍了如何通过Json去解析Cube数据,并将需要数据输出到Excel当中。

    1.4K20

    Java 实现文件批量导入导出最佳实践(兼容xls,xlsx

    另外还有jxl类似poi方式,不过貌似很久没跟新了,2007之后office好像也不支持,这里就不说了。 2、POI使用详解 2.1 什么是Apache POI?...2.2 POIjar包导入 本次讲解使用maven工程,jar包版本使用poi-3.14poi-ooxml-3.14。目前最新版本是3.16。...2.3.2 对象 本文主要介绍HSSFXSSF两种组件,简单讲HSSF用来操作Office 2007版本前excel.xls文件,XSSF用来操作Office 2007版本后excel.xlsx文件...它实现了Workbook 接口,用于Excel文件.xls格式 常用组件: HSSFWorkbook : excel文档对象 HSSFSheet : excel表单 HSSFRow : excel...: 错误信息表 XSSF在org.apache.xssf.usemodel包,并实现Workbook接口,用于Excel文件.xlsx格式 常用组件: XSSFWorkbook : excel文档对象

    4K41

    JAVA大数据导出EXCEL方案

    Excel2003格式 Excel2003支持每个工作表中最多有 65536 行 256列。对于工作表能够支持最大个数,受CPU反应速度内存大小影响。...常用导出方式POI支持该格式只有HSSF包,当导出数据量大于一页最大行数(65536),可采取分页形式进行存储。 常用导出方式推荐:1)POI;2)JXL。...导出方案 一、使用Apache POI SXSSFWorkbook方式进行导出Excel。...POI调用是HSSF包,当导出格式为Office 2007,则调用XSSF包,SXSSF包是POI3.8版本之上对XSSF一个扩展,用于大数据量导出,实际应用可有效避免内存溢出问题。...但是需要注意:JXL只支持xls档案格式,并且处理数据量非常有限。 推荐使用情况:1)数据量不是太大;2)单元格要求简单;3)写入数据

    6.1K20

    java poi拆分excel文件,每个文件保留标题行

    一、背景 在工作,经常需要处理excel文件,将提供excel文件导入数据库,有时候文件太大我们就需要做拆分了,下面实现将xlsx文件xls文件按行数拆分,每个文件都保留标题行。...excel,然后获取总行数,根据传到splitSize计算出需要创建几个excel文件,然后创建需要若干个空excel放入list集合,遍历原始excel,遍历时有行,单元格概念,这个poi都能够操作...,原始文件第一行所有单元格都遍历到每个拆分文件第一行,其余行随机往拆分文件里面一行一行写,写到最后,将拆分文件集合Workbook文件写入存放拆分文件目录,关流。...文件目的就是能够更好操作excel,然后获取总行数,根据传到splitSize计算出需要创建几个excel文件,然后创建需要若干个空excel放入list集合,遍历原始excel,遍历时有行,单元格概念...,这个poi都能够操作,原始文件第一行所有单元格都遍历到每个拆分文件第一行,其余行随机往拆分文件里面一行一行写,写到最后,将拆分文件集合Workbook文件写入存放拆分文件目录,关流。

    83010
    领券