`
DavyJones2010
  • 浏览: 154223 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Java POI: Is Intuitively Empty Check for Excel

阅读更多

1) Check if a cell is intuitively empty

public class CellUtil
{
    private CellUtil()
    {
    }

    /**
     * <p>
     * If cell is null or intuitively empty <br/>
     * NPE Safe<br/>
     * </p>
     * 
     * @param cell
     * @return
     */
    public static boolean isCellEmpty(Cell cell)
    {
        if (null != cell && Cell.CELL_TYPE_BLANK != cell.getCellType()
                && !StringUtil.isEmpty(ExcelUtil.getValue(cell, true)))
        {
            return false;
        }
        else
        {
            return true;
        }
    }
}

 

2. Check if a row is intuitively empty

public class RowUtil
{
    private static final int EMPTY_CELL_COUNT_THRESHOLD = 100;

    private RowUtil()
    {
    }

    /**
     * <p>
     * Get the intuitive last cell num in row <br/>
     * NPE Safe<br/>
     * </p>
     * <p>
     * Use the same check machanism with
     * {@link SheetUtil#getLastRowNumber(org.apache.poi.ss.usermodel.Sheet)}
     * </p>
     * 
     * @param row
     * @return
     */
    public static int getLastCellNum(Row row)
    {
        int lastCellNumber = 0;

        if (isRowEmpty(row))
        {
            return lastCellNumber;
        }
        for (int i = 0; i < row.getLastCellNum(); i++)
        {
            Cell cell = row.getCell(i);
            lastCellNumber = i;

            if (CellUtil.isCellEmpty(cell)
                    && isCellsAllEmpty(row, i, i + EMPTY_CELL_COUNT_THRESHOLD))
            {
                lastCellNumber = i - 1;
                break;
            }
        }
        return lastCellNumber;
    }

    /**
     * <p>
     * Whether all the cells from startCellNum to endCellNum are empty <br/>
     * NPE Safe <br/>
     * </p>
     * 
     * @param row
     * @param startCellNum
     * @param endCellNum
     * @return
     */
    public static boolean isCellsAllEmpty(Row row, int startCellNum,
            int endCellNum)
    {
        if (isRowEmpty(row))
        {
            return true;
        }
        for (int i = startCellNum; i <= endCellNum; i++)
        {
            Cell cell = row.getCell(i);
            if (!CellUtil.isCellEmpty(cell))
            {
                return false;
            }
        }
        return true;
    }

    /**
     * <p>
     * Judge if the row is empty when the last cell number is unknown <br/>
     * NPE Safe<br/>
     * </p>
     * 
     * @param row
     * @return
     */
    public static boolean isRowEmpty(Row row)
    {
        return (null == row) ? true : isRowEmpty(row, row.getLastCellNum());
    }

    /**
     * Judge if the row is empty when the last cell number is known
     * 
     * @param row
     * @param lastCellNum
     * @return
     */
    public static boolean isRowEmpty(Row row, int lastCellNum)
    {
        if (null == row)
        {
            return true;
        }

        if (-1 == row.getFirstCellNum())
        {
            return true;
        }
        for (int c = row.getFirstCellNum(); c <= lastCellNum; c++)
        {
            if (!CellUtil.isCellEmpty(row.getCell(c)))
            {
                return false;
            }
        }
        return true;
    }

    /**
     * <p>
     * If all cells are filled in current Row <br/>
     * NPE Safe<br/>
     * </p>
     * <p>
     * All the blank cells at the end of row will not be detected <br/>
     * </p>
     * 
     * @return
     */
    public static boolean isRowFullyFilled(Row row)
    {
        return RowUtil.isRowEmpty(row) ? false : isRowFullyFilled(row,
                RowUtil.getLastCellNum(row));
    }

    public static boolean isRowFullyFilled(Row row, int endColNum)
    {
        return RowUtil.isRowEmpty(row) ? false : isRowFullyFilled(row, 0,
                endColNum);
    }

    public static boolean isRowFullyFilled(Row row, int startColNum,
            int endColNum)
    {
        if (RowUtil.isRowEmpty(row))
        {
            return false;
        }

        boolean isAllFilled = true;

        for (int i = startColNum; i <= endColNum; i++)
        {
            Cell cell = ExcelUtil.getCell(row, i);
            if (CellUtil.isCellEmpty(cell))
            {
                isAllFilled = false;
            }
        }
        return isAllFilled;
    }
}

 

3) SheetUtil.

public class SheetUtil
{
    private final static Logger logger = Logger.getLogger(SheetUtil.class);

    private static final int EMPTY_ROW_COUNT_THRESHOLD = 100;

    /**
     * <p>
     * Get the intuitive last row number for the sheet
     * <p>
     * 
     * @param sheet
     * @return
     */
    public static int getLastRowNumber(Sheet sheet)
    {
        logger.info(String.format("Start getLastRowNumber, sheet: [%s]",
                sheet.getSheetName()));

        int lastRowNumber = 0;

        for (int i = 0; i <= sheet.getLastRowNum(); i++)
        {
            Row row = sheet.getRow(i);
            lastRowNumber = i;

            if (RowUtil.isRowEmpty(row)
                    && isRowsAllEmpty(sheet, i, i + EMPTY_ROW_COUNT_THRESHOLD))
            {
                lastRowNumber = i - 1;
                break;
            }
        }
        logger.info(String
                .format("Finished getLastRowNumber, lastRowNumber: [%d]",
                        lastRowNumber));
        return lastRowNumber;
    }

    /**
     * <p>
     * Whether all the rows from startRowNumber to endRowNumber are empty
     * </p>
     * 
     * @param sheet
     * @param firstEmptyRowNumber
     * @param emptyRowCountThreshold
     */
    public static boolean isRowsAllEmpty(Sheet sheet, int startRowNumber,
            int endRowNumber)
    {
        for (int i = startRowNumber; i <= endRowNumber; i++)
        {
            if (!RowUtil.isRowEmpty(sheet.getRow(i)))
            {
                return false;
            }
        }
        return true;
    }
}

 

1
0
分享到:
评论

相关推荐

    java_poi实现excel导入导出

    Java POI 实现 Excel 导入导出 Java POI 是一个流行的 Java 库,用于处理 Microsoft Office 文件格式,包括 Excel 文件。在本文中,我们将详细介绍如何使用 Java POI 实现 Excel 导入导出功能。 1. 什么是 Java ...

    JAVA POI Excel转Html

    JAVA POI Excel转Html,代码和所需的jar都在压缩包,项目在线预览需求,实现后分享下

    java poi导出图片到excel示例代码

    Java POI导出图片到Excel示例代码详解 Java POI是Java开发中常用的开源库,用于读写Microsoft Office文件格式,包括Excel、Word、PowerPoint等。今天,我们将介绍如何使用Java POI将图片导出到Excel中。 标题解释 ...

    poi:适合解析小的excel文件,文件稍微大一点就出现OOM。

    事件驱动解析是把文件转换成xml,然后一边读取一边解析,这样就对内存的占用就会很少,可以很好的处理poi出现OOM的问题。 maven添加需要的jar包 &lt;groupId&gt;org.apache.poi &lt;artifactId&gt;poi &lt;version&gt;3.15 ...

    Java POI 生成Excel时显示货币格式

    在Java开发中,Apache POI库是处理Microsoft Office文件(如Word、Excel)的强大工具。本文将深入探讨如何使用Java POI生成带有货币格式的Excel文件,这在财务报告和其他需要精确货币显示的应用场景中尤为关键。 ##...

    Java poi导入导出EXCEL工具类(兼容各版本)

    概述:Java poi导入导出EXCEL工具类(兼容各版本) 一、功能说明 允许同时导入或导出多个sheet,同一sheet可同时存在多个数据块,按数据块划分处理数据。 二、配置文件示例及详细说明 1、导入xml配置示例如下(见...

    poi-3.16(Java解析Excel)

    Apache POI 是一个开源项目,专门用于处理微软...以上是关于Apache POI-3.16在Java中解析Excel的基本介绍和使用要点,通过这个库,开发者可以轻松地在Java应用程序中与Excel文件进行交互,实现数据的导入、导出和处理。

    java的poi生成excel图表demo

    Java的Apache POI库是一个强大的工具,用于读取、创建和修改Microsoft Office格式的文件,尤其是Excel(.xlsx)文档。在本示例中,我们将深入探讨如何利用POI库来生成Excel中的图表曲线,这对于数据可视化和报告生成...

    java poi官方文档

    Java POI 是一个开源项目,由Apache软件基金会维护,它为开发者提供了在Java环境中读取、写入和修改Microsoft Office格式文件的能力。这个强大的库主要关注Excel(XLS和XLSX)、Word(DOC和DOCX)以及PowerPoint...

    Java POI EXCEL导入导出

    Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出...

    Java实现Excel读写的poi 5.2.1版本jar

    Java中的Apache POI库是一个强大的工具,用于读取和写入Microsoft Office格式的文件,特别是Excel的XLS和XLSX格式。在这个5.2.1版本中,POI提供了对Excel电子表格的强大支持,包括读取数据、修改内容、创建新工作簿...

    java poi导出excel

    Java POI库是Apache软件基金会开发的一个开源项目,专门用于读写Microsoft Office格式的文件,包括Excel。在Java中,如果你需要导出Excel文件,Java POI是一个非常实用的工具。下面将详细介绍如何使用Java POI来实现...

    JAVA poi 做EXCEL导出(包含图片) 完整版

    在Java编程环境中,Apache POI库是一个非常实用的工具,用于读取、写入和修改Microsoft Office格式的文件,特别是Excel(.xlsx 和 .xls)文件。本教程将详细介绍如何使用JAVA POI库来创建一个包含图片的完整Excel...

    Java Poi 解析EXCEL数据

    Java Poi库是Apache软件基金会开发的一个开源项目,专门用于处理Microsoft Office格式的文件,包括Excel、Word和PowerPoint等。在Java世界中,Poi是解析和操作这些文件的首选工具,尤其在数据导入导出、自动化测试、...

    Java POI根据模板生成Excel(xlsx)文件

    Java POI库是一个广泛使用的开源项目,专门用于处理Microsoft Office格式的文件,包括Excel的.xls和.xlsx文件。在本示例中,我们关注的是如何利用Java POI来根据模板生成.xlsx格式的Excel文件。这个过程涉及到对...

    Java Poi 操作excel的API 好用

    Java POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,尤其是Excel。它提供了丰富的API,使得在Java环境中操作Excel文件变得极其便捷。本文将深入探讨Java POI的使用,包括其核心功能、API使用示例...

    JAVA POI导出EXCEL代码

    Java POI库是Apache软件基金会的一个项目,专门用于读写Microsoft Office格式的文件,包括Excel。在Java开发中,我们经常使用POI库来处理Excel数据,如读取、写入和修改Excel文件。本篇文章将详细介绍如何使用JAVA ...

    poi3.17jar包下载

    poi3.17jar包下载,支持excel2003,excel2007,亲测可用。poi3.17jar包下载,支持excel2003,excel2007,亲测可用。poi3.17jar包下载,支持excel2003,excel2007,亲测可用。poi3.17jar包下载,支持excel2003,excel2007...

    java poi 操作Excel

    Java POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,包括Excel、Word和PowerPoint等。在Java世界中,如果你想对Excel进行读写操作,POI库是不可或缺的工具。下面将详细介绍如何使用Java POI来操作...

Global site tag (gtag.js) - Google Analytics