如何使用 apache poi 从公式单元格读取单元格值

2024-01-24

我正在尝试从 Excel 文件中读取所有数据,该文件也有一些公式单元格, 但我不知道哪个单元格是公式单元格。无论单元格的类型如何,我如何读取单元格中的所有值。

我的代码看起来像这样

FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
while (rows.hasNext()) {
     row = (HSSFRow) rows.next();
     Iterator cells = row.cellIterator();
     while (cells.hasNext()) {
             cell = (HSSFCell) cells.next();
             if (cell.getCellType() == HSSFCell.CELL_TYPE_STRING) {
                  ar.add(cell.getStringCellValue());
             } else if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {
                 ar.add(cell.getNumericCellValue());
             }else if (cell.getCellType() == HSSFCell.CELL_TYPE_FORMULA) {
                 ar.add(evaluator.evaluateFormulaCell(cell));
             } else {
                 ar.add("");
             }
     }
}

我得到的公式单元格值为 0


您正在寻找的方法是Cell.getCachedFormulaResultType http://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/Cell.html#getCachedFormulaResultType()- 对于公式单元格,它会告诉您公式结果的类型

您的代码可以是这样的:

private void handleCell(int type, Cell cell) {
         if (type == HSSFCell.CELL_TYPE_STRING) {
              ar.add(cell.getStringCellValue());
         } else if (type == HSSFCell.CELL_TYPE_NUMERIC) {
             ar.add(cell.getNumericCellValue());
         } else if (type == HSSFCell.CELL_TYPE_BOOLEAN) {
             ar.add(cell.getBooleanCellValue());
         } else if (type == HSSFCell.CELL_TYPE_FORMULA) {
             // Re-run based on the formula type
             handleCell(cell.getCachedFormulaResultType(), cell);
         } else {
             ar.add("");
         }
}

public void handleSheet(Sheet sheet) {
    for (Row row : sheet) {
       for (Cell cell : row) {
           handleCell(cell.getCellType(), cell);
       }
    }
}

请注意,迭代器仅给出文件中定义的单元格,因此如果单元格从未使用过,则会出现间隙。如果您需要获取每个单元格(包括丢失的单元格),请参阅迭代与获取文档 http://poi.apache.org/spreadsheet/quick-guide.html#Iterator

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 apache poi 从公式单元格读取单元格值 的相关文章

随机推荐

  • 分隔符之间的匹配文本:贪婪或懒惰的正则表达式?

    对于分隔符之间匹配文本的常见问题 例如 lt and gt 有两种常见模式 使用贪心 or 形式的量词START END END e g lt gt gt or 使用懒惰的 or 形式的量词START END e g lt gt 是否有特别
  • 在 UIWebView 中打开弹出链接,可能吗?

    我有一个 UIWebView 我将其用作应用程序中的嵌入式浏览器 我注意到打开新窗口的网页中的链接将被忽略 而不会调用我的代码 我尝试过断点 BOOL webView UIWebView webView shouldStartLoadWit
  • jpa本机查询检索多个实体

    我有一个包含 4 个表的数据库 company staff department project 公司 java Entity Table name company SqlResultSetMapping name COMPANY enti
  • 如何让Keycloak注销取消会话?

    我有一个配置 其中使用 Keycloak 作为身份代理 并使用自定义身份提供程序 使用 Spring Security OAuth 来提供用户信息 我观察到 当我尝试注销 使用 frontchannel 流 时 Keycloak cooki
  • 在 R 中的 ggplot2 中向所有方面添加点的最佳方法

    有人可以告诉我添加相同点的最佳方法吗every下面情节的方面 例如 在下面 如果我选择标记为 未知 的点之一 我可以调用geom point在制作绘图方面后 但 因为它被标记为 未知 它仅在第四个方面突出显示 我想将其添加到every fa
  • 检查 Java 版本时出错:找不到 java.dll

    为什么我会得到这个 我该如何修复它 C Users ash gt java version Error Registry key Software JavaSoft Java Runtime Environment CurrentVersi
  • 如何防止 Angular-ui 模式关闭?

    我在我的项目中使用 Angular UI modalhttp angular ui github io bootstrap modal http angular ui github io bootstrap modal 我不希望用户通过按背
  • 如何使用Spring Security在两个域上进行单点登录?

    我有网络应用程序和两个域 example com 和 example ru example com 国际 example ru 对于当地国家 我的网络应用程序使用 spring security 来授权用户 但是如果用户通过 example
  • Django+Heroku:compilemessages 可以工作,但我的翻译文件不行。

    我发现自己处于一个非常奇怪的境地 我没有我的 mo提交到我的存储库中的文件 我计划在部署后生成它们 我安装了 gettext buildpack 位于https github com piotras heroku buildpack get
  • Git 使用绝对路径忽略目录

    gitignore 中可以使用绝对目录路径吗 我将以下内容放入 var www bidjunction gitignore 中 但是 html 仍然被跟踪 为什么还被追踪 var www bidjunction html 编辑 有点偏离主题
  • 如何在 ASP.NET MVC 中维护 Html.CheckBox() 的状态

    我的 MVC 应用程序中有两个复选框 它们都是布尔 位字段 通知电子邮件 和 通知短信 每当我回发到服务器并发生错误时 尽管我设置了尝试的值 但复选框的状态已消失 为什么不做这么简单的事情呢
  • 重定向回他们登录前查看的实际页面

    如果我的用户被重定向到登录页面 如何使他们在登录后重定向到原始目标页面 他们第一次单击的页面 将最初请求的 URL 作为重定向到登录页面的请求参数传递 String from request getRequestURI if request
  • 记录器日志自动清除

    我创建了这个脚本来通过电子邮件发送日志 类似于上的示例https developers google com apps script reference base logger https developers google com app
  • 什么是 python runpy 模块? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想知道这样做的目的runpyPython 中的模块以及它如何帮助 Python 用户社区的日常开发 有人可以解释一下它的必要性 用法
  • 如何在 PySpark ML 中创建自定义 SQLTransformer 来透视数据

    我有一个类似于以下结构的数据框 Prepare training data training spark createDataFrame 990011 1001 01 Salary 1000 0 0 990011 1002 02 POS P
  • 显示 Rails Carrierwave URL,而不暴露整个路径

    我正在制作一个付费下载的网络应用程序 并且我遵循了 Carrierwave 的指南保护上传 https github com carrierwaveuploader carrierwave wiki how to secure upload
  • 如何更新进度条的进度以显示复制文件的进度

    我想要一个进度条来指示正在复制的文件如何通过组合以下代码行来更新进度条以显示复制文件的进度 这是我的进度条代码 FXML private void startbtnaction ActionEvent event startbtn setD
  • ASP.NET 5 beta 7 的共享类库参考

    在我们当前的环境中 我们有一些共享的公共库 C 类库 NET 4 5 1 csproj 项目 它们被 ASP NET 和控制台应用程序引用 我们正在考虑将 1 个 Web 项目升级到 ASP NET 5 以开始测试即将到来的一些新更改 由于
  • Flexbox 在 Safari 中添加 1px 左边距

    我在 Safari 向 Flexbox 行中第一个元素的左侧添加 1px 边距 间隙时遇到问题 我在下面附上了该问题的图片 弹性框 CSS 是 equal height display webkit box OLD iOS 6 Safari
  • 如何使用 apache poi 从公式单元格读取单元格值

    我正在尝试从 Excel 文件中读取所有数据 该文件也有一些公式单元格 但我不知道哪个单元格是公式单元格 无论单元格的类型如何 我如何读取单元格中的所有值 我的代码看起来像这样 FormulaEvaluator evaluator wb g