poi如何验证excel

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poi如何验证excel相关的知识,希望对你有一定的参考价值。

参考技术A //poi-3.7.jar
/**
* 合并单元格处理--加入list
*
* @param sheet
* @return
*/
public void getCombineCell(HSSFSheet sheet, List<CellRangeAddress> list)
// 获得一个 sheet 中合并单元格的数量
int sheetmergerCount = sheet.getNumMergedRegions();
// 遍历合并单元格
for (int i = 0; i < sheetmergerCount; i++)
// 获得合并单元格加入list中
CellRangeAddress ca = sheet.getMergedRegion(i);
list.add(ca);



/**
* 判断单元格是否为合并单元格
*
* @param listCombineCell
* 存放合并单元格的list
* @param cell
* 需要判断的单元格
* @param sheet
* sheet
* @return
*/
public static Boolean isCombineCell(List<CellRangeAddress> listCombineCell,
HSSFCell cell, HSSFSheet sheet)
int firstC = 0;
int lastC = 0;
int firstR = 0;
int lastR = 0;
for (CellRangeAddress ca : listCombineCell)
// 获得合并单元格的起始行, 结束行, 起始列, 结束列
firstC = ca.getFirstColumn();
lastC = ca.getLastColumn();
firstR = ca.getFirstRow();
lastR = ca.getLastRow();
if (cell.getColumnIndex() <= lastC&& cell.getColumnIndex()>= firstC)
if (cell.getRowIndex() <= lastR && cell.getRowIndex() >= firstR)
return true;



return false;

本回答被提问者和网友采纳

POI实现excel的数据验证

目录

前言

Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。
实际开发中,用POI来读写excel文档的比较多。所以,这里记录下用POI读取excel文档的一些难点做下记录。

难点1:合并单元格

在实际开发中,有时会遇到如图示例,需要按照如图所示进行导出excel文件。这就涉及到了合并单元格和给单元格赋值的问题。
技术分享图片

代码实现策略:

step 1: 合并单元格

eventSheet.addMergedRegion(new CellRangeAddress(lineNum, fields.size() + lineNum - 1, 1, 1));

step 2: 给单元格赋值

按照正常给单元格赋值即可,只是在合并的单元格第一行赋值就行,不用重复赋值;

cell = row.createCell((short) 1);
cell.setCellValue(eventVO.getEventId());
cell.setCellStyle(align_center_style);

难点2:数据验证-下拉框

在导出excel文件时,需要添加数据验证的下拉框。如图:
技术分享图片

代码实现策略:

step 1:设置需要进行数据验证的单元格范围和可供选择的值

    /**
     * 设置 excel数据验证
     * 
     * @param firstRow
     * @param firstCol
     * @param endRow
     * @param endCol
     * @param strList  可供选择的值
     * @return
     * @since @ 2018年3月14日
     */
    XSSFDataValidation getDataValidationList(XSSFSheet sheet, short firstRow, short firstCol, short endRow, short endCol, List<String> strList) {
        String[] datas = strList.toArray(new String[0]);
        XSSFDataValidationHelper dvHelper = new XSSFDataValidationHelper(sheet);
        XSSFDataValidationConstraint dvConstraint = (XSSFDataValidationConstraint) dvHelper
                .createExplicitListConstraint(datas);
        CellRangeAddressList addressList = new CellRangeAddressList(firstRow, endRow, firstCol, endCol);
        XSSFDataValidation validation = (XSSFDataValidation) dvHelper.createValidation(dvConstraint, addressList);
        return validation;
    }

step 2:给当前sheet添加数据验证

sheet.addValidationData(line2ValidationList);

难点3:数据验证-某列保证唯一性

有时候在excel文件的某列添加数据时,需要保证某列的数据唯一。这就需要使用excel的数据验证-自定义,设置为:=COUNTIF($B$2:B2,B2)=1(说明:从B2开始,B列的数据保证唯一,若是重复会给出提示,不能保存)
技术分享图片

代码实现策略:

step 1:设置需要进行数据验证的单元格范围

    public static XSSFDataValidation getDataValidationCustomFormula(XSSFSheet sheet, short firstRow, short firstCol, short endRow, short endCol, String formula) {
        XSSFDataValidationHelper dvHelper = new XSSFDataValidationHelper(sheet);
        XSSFDataValidationConstraint dvConstraint = (XSSFDataValidationConstraint) dvHelper
                .createCustomConstraint(formula);
        CellRangeAddressList addressList = new CellRangeAddressList(firstRow, endRow, firstCol, endCol);
        XSSFDataValidation validation = (XSSFDataValidation) dvHelper.createValidation(dvConstraint, addressList);

        validation.createErrorBox("Error", "Repeating Date.");
        validation.setShowErrorBox(true);
        validation.setEmptyCellAllowed(true);
        validation.setSuppressDropDownArrow(true);
        validation.setShowPromptBox(true);
        validation.setErrorStyle(DataValidation.ErrorStyle.STOP);

        return validation;
    }

step 2:给当前sheet添加数据验证

        XSSFDataValidation dataValidation = XX.getDataValidationCustomFormula((XSSFSheet) eventSheet, (short) 1, (short) 1, (short) (lineNum + 5), (short) 1, "=COUNTIF($B$2:B2,B2)=1");
    if (dataValidation != null) {
        eventSheet.addValidationData(dataValidation);
    }




以上是关于poi如何验证excel的主要内容,如果未能解决你的问题,请参考以下文章

Java中开发POI读取导入Excel文件及验证

SpringBoot+POI实现导入Excel时验证并返回错误Cell标红的文件

Java 使用poi导入excel,结合xml文件进行数据验证的例子(增加了jar包)

Java通过POI为Excel添加数据验证

002-poi-excel-导出设置单元格数据校验规则

poi实现excel数据导入到mysql数据库(加上excel的验证)