Java POI: Is Intuitively Empty Check for Excel_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Java POI: Is Intuitively Empty Check for Excel

Java POI: Is Intuitively Empty Check for Excel

 2014/5/22 12:57:31  DavyJones2010  程序员俱乐部  我要评论(0)
  • 摘要:1)CheckifacellisintuitivelyemptypublicclassCellUtil{privateCellUtil(){}/***<p>*Ifcellisnullorintuitivelyempty<br/>*NPESafe<br/>*</p>**@paramcell*@return*/publicstaticbooleanisCellEmpty(Cellcell){if(null!=cell&&Cell
  • 标签:for excel Java

1) Check if a cell is intuitively empty

class="java" name="code">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;
    }
}

?

发表评论
用户名: 匿名