读取Excel文件时如何识别单元格为空白或为空或为空

2024-04-04

我读取了一个 Excel 文件来传递某些数据字段的输入。但是当我运行该程序时,某些单元格值返回为 null,某些单元格值返回为空白。实际上,当我打开 Excel 文件时,单元格中没有可用值。

如何手动识别 Excel 单元格为空或空白。

对于某些情况,我需要将空白值传递给字段。 如果单元格为空,我无法将值传递到字段。

引导我伸出援手。

Code:

public static void readAllData() throws IOException{

    Object result = null;

    String sheetName = "Testsheet";

    String filePathxlsx = "C:/Users/MSTEMP/Documents/Files/Testxssf.xlsx";

    try

    {

     FileInputStream in = new FileInputStream(filePathxlsx);

     File file = new File(filePathxlsx);



    if(file.isFile() && file.exists()){

        XSSFWorkbook xworkbook = new XSSFWorkbook(in);
        XSSFSheet xsheet=xworkbook.getSheet(sheetName);
        int totalRows = xsheet.getLastRowNum();

        for(int row =1; row<totalRows;row++){
            xrow=xsheet.getRow(row);
            int totalCells=xrow.getLastCellNum();

            for(int cell =0; cell<totalCells;cell++){
                if(xrow != null)
                {
                    xcell= xrow.getCell(cell);

                    if(xcell!=null)
                    {
                        switch (xcell.getCellType()) {

                            case Cell.CELL_TYPE_NUMERIC:// numeric value in excel
                                if(DateUtil.isCellDateFormatted(xcell)){

                                    Date myDate = xcell.getDateCellValue();
                                    SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy", Locale.US);
                                    result = formatter.format(myDate);
                                    //System.out.println("Today : " + result);  
                                }
                                else{
                                    result = new BigDecimal(xcell.getNumericCellValue()).toPlainString();
                                }
                                break;

                            case Cell.CELL_TYPE_STRING: // string value in excel
                                result = xcell.getStringCellValue();
                                break;

                            case Cell.CELL_TYPE_BOOLEAN: // boolean value in excel
                                result = xcell.getBooleanCellValue();
                                break;

                            case Cell.CELL_TYPE_BLANK: // blank value in excel
                                result = xcell.getStringCellValue();
                                break;

                            case Cell.CELL_TYPE_ERROR: // Error value in excel
                                result = xcell.getErrorCellValue()+"";
                                break;
                            }
                        }
                        else
                        {
                            System.out.println("Cell is empty");
                        }
                    System.out.println("Value "+result);
                }
                else
                {
                    System.out.println("Row is empty");
                }
            }    
        }
    }
    inputStream.close();
}
catch (Exception ex){
    ex.printStackTrace();
}

}


不确定为什么要手动识别单元格类型,但如果您想将“null”或“blank”情况视为单个情况,您可以使用 Row.getCell 的其他版本,它采用第二个参数来指定缺少单元格策略 https://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/Row.MissingCellPolicy.html.

so :

 xcell= xrow.getCell(cell);

会变成 :

 xcell = xrow.getCell(cell, Row.RETURN_NULL_AS_BLANK);

因此,在任何情况下,单元格都有值或为空白,但绝不会为空。

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

读取Excel文件时如何识别单元格为空白或为空或为空 的相关文章

  • 这个函数(for循环)空间复杂度是O(1)还是O(n)?

    public void check 10 for string i list Integer a hashtable get i if a gt 10 hashtable remove i 这是 O 1 还是 O n 我猜测 O n 但不是
  • VBA 中 AND 函数如何工作?

    如果这是一个愚蠢的问题 我很抱歉 但是 Excel VBA AND 函数是否检查其中的每个条件然后继续 或者在第一个 FALSE 条件处停止而不检查其他条件 我想知道出于优化目的 但到目前为止在网上没有找到任何相关信息 提前致谢 示例 如果
  • Cassandra java驱动程序协议版本和连接限制不匹配

    我使用的java驱动程序版本 2 1 4卡桑德拉版本 dsc cassandra 2 1 10cql 的输出给出以下内容 cqlsh 5 0 1 Cassandra 2 1 10 CQL spec 3 2 1 Native protocol
  • 使用 AES SecretKey 的 Java KeyStore setEntry()

    我目前正在 Java 中开发一个密钥处理类 特别是使用 KeyStore 我正在尝试使用 AES 实例生成 SecretKey 然后使用 setEntry 方法将其放入 KeyStore 中 我已经包含了代码的相关部分 The KS Obj
  • Java 文件上传速度非常慢

    我构建了一个小型服务 它从 Android 设备接收图像并将其保存到 Amazon S3 存储桶中 代码非常简单 但是速度非常慢 事情是这样的 public synchronized static Response postCommentP
  • 如何模拟从抽象类继承的受保护子类方法?

    如何使用 Mockito 或 PowerMock 模拟由子类实现但从抽象超类继承的受保护方法 换句话说 我想在模拟 doSomethingElse 的同时测试 doSomething 方法 抽象超类 public abstract clas
  • 画透明圆,外面填充

    我有一个地图视图 我想在其上画一个圆圈以聚焦于给定区域 但我希望圆圈倒转 也就是说 圆的内部不是被填充 而是透明的 其他所有部分都被填充 请参阅这张图片了解我的意思 http i imgur com zxIMZ png 上半部分显示了我可以
  • Hazelcast 分布式锁与 iMap

    我们目前使用 Hazelcast 3 1 5 我有一个简单的分布式锁定机制 应该可以跨多个 JVM 节点提供线程安全性 代码非常简单 private static HazelcastInstance hInst getHazelcastIn
  • 在 Netbeans 8 上配置 JBoss EAP 的问题

    我已经下载了 JBoss EAP 7 并正在 Netbeans 8 上配置它 我已经到达向导 实例属性 其中要求从选择框中选择 域 当我打开选择框时 它是空的 没有什么可以选择的 因此 完成 按钮也处于非活动状态 这使得无法完成配置 我通过
  • 将 SignedHash 插入 PDF 中以进行外部签名过程 -workingSample

    遵循电子书第 4 3 3 节 PDF 文档的数字签名 https jira nuxeo com secure attachment 49931 digitalsignatures20130304 pdf 我正在尝试创建一个工作示例 其中 客
  • Java 中的“Lambdifying”scala 函数

    使用Java和Apache Spark 已用Scala重写 面对旧的API方法 org apache spark rdd JdbcRDD构造函数 其参数为 AbstractFunction1 abstract class AbstractF
  • 以编程方式在java的resources/source文件夹中创建文件?

    我有两个资源文件夹 src 这是我的 java 文件 资源 这是我的资源文件 图像 properties 组织在文件夹 包 中 有没有办法以编程方式在该资源文件夹中添加另一个 properties 文件 我尝试过这样的事情 public s
  • 使用 OpenPyXL 迭代工作表和单元格,并使用包含的字符串更新单元格[重复]

    这个问题在这里已经有答案了 我想使用 OpenPyXL 来搜索工作簿 但我遇到了一些问题 希望有人可以帮助解决 以下是一些障碍 待办事项 我的工作表和单元格数量未知 我想搜索工作簿并将工作表名称放入数组中 我想循环遍历每个数组项并搜索包含特
  • 在 Spring 中重构这个的最佳方法?

    private final ExecutorService executorParsers Executors newFixedThreadPool 10 public void parse List
  • Netty:阻止调用以获取连接的服务器通道?

    呼吁ServerBootstrap bind 返回一个Channel但这不是在Connected状态 因此不能用于写入客户端 Netty 文档中的所有示例都显示写入Channel从它的ChannelHandler的事件如channelCon
  • 我可以创建自定义 java.* 包吗?

    我可以创建一个与预定义包同名的自己的包吗在Java中 比如java lang 如果是这样 结果会怎样 这难道不能让我访问该包的受保护的成员 如果不是 是什么阻止我这样做 No java lang被禁止 安全管理器不允许 自定义 类java
  • 将 Azure AD 高级自定义角色与 Spring Security 结合使用以进行基于角色的访问

    我创建了一个演示 Spring Boot 应用程序 我想在其中使用 AD 身份验证和授权 并使用 AD 和 Spring Security 查看 Azure 文档 我执行了以下操作 package com myapp contactdb c
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • FileOutputStream.close() 中的设备 ioctl 不合适

    我有一些代码可以使用以下命令将一些首选项保存到文件中FileOutputStream 这是我已经写了一千遍的标准代码 FileOutputStream out new FileOutputStream file try BufferedOu
  • Trie 数据结构 - Java [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 是否有任何库或文档 链接提供了在 java 中实现 Trie 数据结构的更多信息 任何帮助都会很棒 Thanks 你可以阅读Java特里树

随机推荐