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

如何使用apache poi获取公式单元格值(数据)

Apache POI是一个用于操作Microsoft Office文档的Java库。它提供了许多类和方法,可以读取、写入和修改Excel文件。要使用Apache POI获取公式单元格的值,可以按照以下步骤进行操作:

  1. 导入Apache POI的相关库文件,包括poi.jar、poi-ooxml.jar和poi-ooxml-schemas.jar。
  2. 创建一个Workbook对象,表示Excel文件。可以根据文件类型选择使用HSSFWorkbook(用于.xls文件)或XSSFWorkbook(用于.xlsx文件)。
  3. 使用Workbook对象打开Excel文件,可以通过文件路径或输入流进行操作。
  4. 获取要操作的Sheet对象,可以通过Sheet的名称或索引进行获取。
  5. 使用Sheet对象的getRow()方法获取行对象,可以通过行号或索引进行获取。
  6. 使用Row对象的getCell()方法获取单元格对象,可以通过列号或索引进行获取。
  7. 使用Cell对象的getCellType()方法判断单元格类型,如果是公式类型,则继续下一步操作。
  8. 使用Cell对象的getCachedFormulaResultType()方法获取公式计算后的值的类型。
  9. 根据值的类型,使用Cell对象的相应方法(如getNumericCellValue()、getStringCellValue()等)获取公式计算后的值。

下面是一个示例代码,演示如何使用Apache POI获取公式单元格的值:

代码语言:java
复制
import org.apache.poi.ss.usermodel.*;

public class ApachePOIExample {
    public static void main(String[] args) {
        try {
            // 创建Workbook对象
            Workbook workbook = WorkbookFactory.create(new File("example.xlsx"));

            // 获取Sheet对象
            Sheet sheet = workbook.getSheetAt(0);

            // 获取第一行
            Row row = sheet.getRow(0);

            // 获取第一列(单元格A1)
            Cell cell = row.getCell(0);

            // 判断单元格类型是否为公式类型
            if (cell.getCellType() == CellType.FORMULA) {
                // 获取公式计算后的值的类型
                CellType resultType = cell.getCachedFormulaResultType();

                // 根据值的类型获取值
                if (resultType == CellType.NUMERIC) {
                    double numericValue = cell.getNumericCellValue();
                    System.out.println("公式计算后的值为:" + numericValue);
                } else if (resultType == CellType.STRING) {
                    String stringValue = cell.getStringCellValue();
                    System.out.println("公式计算后的值为:" + stringValue);
                } else if (resultType == CellType.BOOLEAN) {
                    boolean booleanValue = cell.getBooleanCellValue();
                    System.out.println("公式计算后的值为:" + booleanValue);
                }
            }
            
            // 关闭Workbook对象
            workbook.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

这是一个简单的示例,演示了如何使用Apache POI获取公式单元格的值。根据实际需求,可以根据具体的Excel文件结构和数据类型进行相应的处理和操作。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云对象存储(COS):提供高可靠、低成本的云端存储服务,适用于存储和处理各种类型的文件和数据。
  • 腾讯云云服务器(CVM):提供灵活可扩展的云服务器,支持多种操作系统和应用场景,满足不同规模和需求的计算资源需求。
  • 腾讯云云数据库MySQL版:提供高性能、可扩展的云数据库服务,适用于各种规模的应用程序和业务需求。
  • 腾讯云人工智能:提供丰富的人工智能服务和工具,包括图像识别、语音识别、自然语言处理等,帮助开发者构建智能化的应用和解决方案。

请注意,以上链接仅供参考,具体产品选择应根据实际需求和情况进行评估和决策。

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

相关·内容

  • Excel公式练习64: 获取单元格区域中移除空单元格后的

    本次的练习是:如下图1所示,列C中有很多空单元格使用公式将其整理,移除空单元格并将放置在列D中。 ? 图1 先不看答案,自已动手试一试。...重点看看: SMALL(IF((List)>1,ROW(List),""),ROW(E1))-2 我们要从IF((List)>1,ROW(List),"")中获取第ROW(E1)小的,而ROW(E1)...,ROW(E1)将自动更新为ROW(E2)、ROW(E3)、…等,即返回2、3、…,获取数组中第2小的、第3小的、… 相应地在工作表中演示如下图4所示。...图4 这样,在单元格D2中的公式最终等价为: OFFSET(C2, 2-2,0) 得到单元格C2中的。...在单元格D3中的公式最终等价为: OFFSET(C2, 6-2,0) 得到单元格C6中的。 在单元格D4中的公式最终等价为: OFFSET(C2, 7-2,0) 得到单元格C7中的。 依此类推。

    3.1K51

    Excel公式技巧56:获取最大最小所在的单元格地址

    学习Excel技术,关注微信公众号: excelperfect 在《Excel公式技巧54:在多个工作表中查找最大最小》中,我们在MAX/MIN函数中使用多工作表引用来获取最大/最小。...在《Excel公式技巧55:查找并获取最大最小所在的工作表》中,我们更进一步,获取最大/最小所在的工作表名称。本文来讲解如何利用公式获取最大/最小在哪个单元格。...示例工作表数据如下图1所示,我们可以使用MAX/MIN函数获取工作表数据的最大/最小,并且由于数据较少,可以清楚地看出最大所在的单元格为B2,最小位于单元格A2。 ?...图1 可以使用ADDRESS函数来获取单元格地址,但关键是要传递给该函数合适的行列参数。...((A1:D4=C7)*(COLUMN(A1:D4)))),1,1) 得到最大所在的单元格地址: B2 公式中: ROW(A1:A4) 解析为: {1;2;3;4} ROW(A1:D4) 解析为: {

    9.8K64

    终于有一款组件可以全面超越Apache POI

    Apache POI没有内置的排序功能。但是,用户可以使用shiftRows()/ ShiftColumns()并以编程方式对数据进行排序。...单元格获取/设置 在对单个单元格执行获取/设置的情况下,GcExcel比Apache POI表现的更好。 13....、POI和Aspose.Cells的性能结果,如下所示: 设置:获取和保存100,000 * 30单元格的double / string / date,下图显示了double的结果。...设置:计算和保存20,000 * 30个单元格公式,结果如下: GcExcel 用时不超过1S ;Apache POI 则达到10S左右 ?...打开并保存一个20.5MB 的 Excel文件,其中包含了许多数据公式单元格格式,结果如下: GcExcel 用时不超过4.9S ;Apache POI 则达到10S左右 GcExcel 内存消耗为

    3.3K10

    Java 基于Apache POI实现Excel读写操作

    //4.获取单元格 Cell cell = row.getCell(0); // 获取行的第0个元 //5.获取单元格 System.out.println...SXSSFWorkbook:POI3.8开始,新增此API,是 XSSFWorkbook API的兼容流式扩展,主要解决当使用 XSSFWorkbook 方式导出大数据量时,内存溢出的问题,支持导出大量的数据...其原理就是使用硬盘空间代替内存:仅保存最新的数据行在内存里供查看,在此之前的数据行都会被写入到硬盘里(Windows电脑的话,是写入到C盘根目录下的temp文件夹)。..., // // 数字(整数、小数、日期) STRING(1), FORMULA(2), // 公式,即单元格内容通过公式计算出来 BLANK(3), // 为空//什么时候会存储空...,取决于所使用的表格软件 BOOLEAN(4), ERROR(5); 写入Excel import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook

    55150

    如何在合并单元格使用公式计算装车时间

    今晚在学员群里看到一个很有挑战性的问题 大概的数据案例如下 第一想法是使用INDIRECT函数,例如第一个合并单元格,可以用下面得出答案 =INDIRECT("C7")-INDIRECT("B2"...) 据此反推 我们要得到每一个合并单元格的开始行行号以及结束行行号 首先我们用ROW函数列出行号 =ROW() 接下来如何获得每个单元格最开始的行号(例如2)和最末尾的行号(例如7)呢,这需要根据合并单元格数量进行分组...就是把内容(公式,数值等)放在合并单元格的左上角,其他单元格都变成空 根据这个实质,我们可以对单元格进行统计分组,所以有了辅助列2,需要巧妙的用COUNTA函数 因为合并单元格之间都是空,所以会自动统计合并单元格数量...这里有个小技巧:注意最开始的单元格是固定的,这样下拉会使范围越来越大 好了,我们根据这两列可以求到每个合并单元格最开始的行号和列号了 最开始的行号=第一个合并单元格分组号 最末尾的行号=第一个合并单元格分组号...+组员数-1 使用MATCH函数找到第一个分组号,返回对应的辅助列1的内容,就是合并单元格最开始的行号 在第一个思路的基础上,加上分组组员数量,减1,即得到末尾行号 回到最开始的思路 =INDIRECT

    76410

    如何在合并单元格使用公式计算装车时间

    提问 今晚在学员群里看到一个很有挑战性的问题图片 [图片] 大概的数据案例如下 [在这里插入图片描述] 解答 第一想法是使用INDIRECT函数,例如第一个合并单元格,可以用下面得出答案 =INDIRECT...首先我们用ROW函数列出行号 =ROW() [在这里插入图片描述] 接下来如何获得每个单元格最开始的行号(例如2)和最末尾的行号(例如7)呢,这需要根据合并单元格数量进行分组 接下来用COUNTA函数分组...合并单元格的实质是什么?...就是把内容(公式,数值等)放在合并单元格的左上角,其他单元格都变成空 根据这个实质,我们可以对单元格进行统计分组,所以有了辅助列2,需要巧妙的用COUNTA函数 [在这里插入图片描述] 因为合并单元格之间都是空...最开始的行号=第一个合并单元格分组号 最末尾的行号=第一个合并单元格分组号+组员数-1 [在这里插入图片描述] 使用MATCH函数找到第一个分组号,返回对应的辅助列1的内容,就是合并单元格最开始的行号

    1K00

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

    一、简介 Apache POIApache软件基金会的免费开源的跨平台的 Java API,POI提供API给Java程序对Microsoft Office格式(Excel、WORD、PowerPoint...(String value):设置单元格 setCellType():设置单元格类型,如 字符串、数字、布尔等 setCellStyle():设置单元格样式 String getStringCellValue...():获取单元格中的字符串 setCellStyle(HSSFCellStyle style):设置单元格样式,例如字体、加粗、格式化 setCellFormula(String formula...):设置计算公式,计算的结果作为单元格,也提供了异常常用的函数,如求和"sum(A1,C1)"、日期函数、字符串相关函数、CountIf和SumIf函数、随机数函数等 5、HSSFCellStyle...5.5 获取第六列计算公式 HSSFFormulaEvaluator e = new HSSFFormulaEvaluator(workbook); cell5 =

    48010

    Apache POI使用详解

    一 :简介 开发中经常会设计到excel的处理,如导出Excel,导入Excel到数据库中,操作Excel目前有两个框架,一个是apachepoi, 另一个是 Java Excel Apache...在开发中我们经常使用HSSF用来操作Excel处理表格数据,对于其它的不经常使用。...(); 设置单元格类型,如 字符串、数字、布尔等 setCellStyle(); 设置单元格样式 String getStringCellValue(); 获取单元格中的字符串 setCellStyle...(HSSFCellStyle style); 设置单元格样式,例如字体、加粗、格式化 setCellFormula(String formula); 设置计算公式,计算的结果作为单元格,也提供了异常常用的函数...// 获取计算公式 HSSFFormulaEvaluator e = new HSSFFormulaEvaluator(workbook); cell5 = e.evaluateInCell

    4K10

    保姆级文件导入导出功能开发{POI || EasyExcel},还看不懂,你来咬我啊

    文件的导入导出功能目前主要是两家独大,一个就是ApachePOI,另一家就是阿里的EasyExcel.这里两种技术我都会在下面的文章里面详细讲解. 2.POI: 2.1-POI介绍: POI的全称是:...(cell.getNumericCellValue()); } 这是最简单的读写操作流程.并且其中的工作表,行,单元格都是通过索引来获取,除了索引,POI还为我们提供了其他的获取方法,下面我们来详细说明一下...获取工作表: ? 第一种就是直接通过工作表的表名来进行获取,第二种就是直接通过工作簿内工作表的索引来进行获取. 获取行就是只能通过索引来获取 剩下的就是获取单元格了: ?...并且他们的返回都是int类型的,所以这就行号解释了为什么能够直接调用这些变量了. 2.7-POI计算公式 这里我们在之前的test.xls文件里面为一个单元格增加了一个公式: ?...(); System.out.println(formula); //执行公式之后,单元格内的 CellValue

    1.8K30

    如何选择最适合您的Excel处理库?

    POI(Poor Obfuscation Implementation)是Apache基金会的开源项目,提供了Java语言的Excel处理功能。...当遍历读取数据时,POI需要嵌套循环每个cell(单元格)。...GcExcel则提供了IRange接口,range(区域)指的是一个或者一片单元格,可以直接从range上使用getValue方法获取数据。...POI不支持切片器,数据透视图,迷你图等功能,无法对这些功能进行修改。 写入功能 读写功能是Excel处理库最基本的两个功能,在写入方面两者都支持写入数据、样式和公式到Excel文件中。...GcExcel支持 482个公式,同时也支持自定义公式,允许用户使用Java去扩展公式,或实现特定业务的公式。 性能对比 通过实际测试,我们发现GcExcel在处理大型Excel文件时表现出色。

    19220

    Java数据可视化:报表技术

    简单的说:报表就是用表格、图表等格式来动态显示数据,可以用公式表示为:“报表 = 多样的格式 + 动态的数据”。...poi现在一直有更新。所以现在主流使用POI。...; 3、创建单元格 添加文本类单元格 Label labelC = new Label(列索引, 行索引, "单元格中的内容"); sheet.addCell(labelC); 4、写入到文件 workbook.write...最终的目标就是读取每一行数据,把数据转成用户的对象,保存到表中 实现的步骤:1、根据上传的文件创建Workbook ​ 2、获取到第一个sheet工作表 ​ 3、从第二行开始读取数据 ​ 4、读取每一个单元格...User user = null; Row row = null; Cell cell = null; //开始循环每行,获取每行的单元格中的,放入到user属性中

    2.6K40

    报表技术

    简单的说:报表就是用表格、图表等格式来动态显示数据,可以用公式表示为:“报表 = 多样的格式 + 动态的数据”。...poi现在一直有更新。所以现在主流使用POI。...; 3、创建单元格 添加文本类单元格 Label labelC = new Label(列索引, 行索引, "单元格中的内容"); sheet.addCell(labelC); 4、写入到文件 workbook.write...最终的目标就是读取每一行数据,把数据转成用户的对象,保存到表中 实现的步骤:1、根据上传的文件创建Workbook ​ 2、获取到第一个sheet工作表 ​ 3、从第二行开始读取数据 ​ 4、读取每一个单元格...User user = null; Row row = null; Cell cell = null; //开始循环每行,获取每行的单元格中的,放入到user属性中

    2.6K30

    Java实现学生信息管理系统读取Excel数据

    在Java开发的学生信息管理系统中,读取Excel数据是一个常见的需求。Excel文件常常被用作学生信息的输入源,因此,了解如何使用Java读取Excel数据对于开发人员来说是一项必备技能。...为了处理Excel文件,我们将使用Apache POI库,它是一个流行的Java库,专门用于处理Microsoft Office文件。...你可以使用getCellType方法检查单元格数据类型,并根据需要处理数据。...Object cellValue; switch (cell.getCellType()) { // 根据单元格类型获取单元格 case STRING: cellValue = cell.getStringCellValue...3)获取到有效列之后 去遍历每一行数数据,如果有整行为空则跳出循环,结束数据获取。五、总结通过以上代码和解释,我们了解了如何使用Java和Apache POI库来读取Excel文件。

    31710
    领券