POI实现excel的数据验证

目录

  • 前言
  • 难点1:合并单元格
    • 代码实现策略:

      • step 1: 合并单元格
      • step 2: 给单元格赋值
  • 难点2:数据验证-下拉框
    • 代码实现策略:

      • step 1:设置需要进行数据验证的单元格范围和可供选择的值
      • step 2:给当前sheet添加数据验证
  • 难点3:数据验证-某列保证唯一性
    • 代码实现策略:

      • step 1:设置需要进行数据验证的单元格范围
      • step 2:给当前sheet添加数据验证

前言

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);
    }

原文地址:https://www.cnblogs.com/wsygdb/p/9670234.html

时间: 2024-08-06 18:08:21

POI实现excel的数据验证的相关文章

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

String path = "d:\\success.xlsx";         String sheetName = "sheetlist";         XSSFWorkbook wb = null;         XSSFSheet sheetlist = null;         File inputFile = new File(path);         if (inputFile.exists()) {             wb = n

Java通过POI技术操作Excel(3)----数据导出

在之前的博客中,总结了Excel模板生成和Excel数据录入,然后剩最后一个模块,数据库中数据读取,在之前的基础上我们来看这一模块,应该已经非常容易了,接下来简单的介绍一下: 这里我们仍然以jsp+servlet为例,对SqlServer2005数据库进行操作,如下都是基本步骤: 1.连接数据库:2.根据sql语句获取数据库中值:3.将值进行导出操作: 首先,我们来记性数据库的连接,这个相信接触过java的人都不会陌生,我就不赘述了 1 public class DataBase { 2 pri

使用poi读取Excel文件数据

除分数被转换为小数存储外,其他数据经本人测试无问题,如发现问题请留言,方便及时更新 package com.haiyisoft.iecp.util; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.text.DateFormat;

java中使用poi导出excel表格数据并且可以手动修改导出路径

在我们开发项目中,很多时候会提出这样的需求:将前端的某某数据以excel表格导出,今天就给大家写一个简单的模板. 这里我们选择使用poi导出excel: 第一步:导入需要的jar包到 lib 文件夹下 jar包下载路径:http://download.csdn.net/download/pumpkin09/7077011 第二步:添加poi导出工具类 1 package com.yjd.admin.util; 2 3 import java.io.IOException; 4 import ja

工作记录:使用POI从excel导入数据(2003版本、2007以及以上版本)

使用poi读取2007版本及以上的数据实例: public List<KqRecord> readXlsx(String path) throws IOException {         InputStream is = new FileInputStream(path);         XSSFWorkbook xssfWorkbook = new XSSFWorkbook(is);//2007以上版本         KqRecord kq = null;         List&

poI 以Excel导出数据

导入jar包,参考 http://zhuws.blog.51cto.com/11134439/1973698 2.步入正题,看代码 // 大致思路,先看本地文件存在不,如果不存在,把查询数据导出到Excel,然后再下载 代码有点乱 String filePath = request.getParameter("filePath"); filePath = new String( filePath.getBytes("iso-8859-1"), "UTF-8

selenium+testng+java+poi进行excel的数据参数化

一,首先要配置好环境selenium+testng和poi包,selenium+testng的环境搭建就不细说了,这里有poi的包的分享https://pan.baidu.com/s/1BJEIWR57_4vwrCDy6WuBWA 下载后在项目里面添加lib文件再把所需要的poi包放入其中,并在项目里面导入其java build path中. 二,新建立一个Excel数据表. 三,代码如下: import org.testng.annotations.Test;import org.testng

Java POI 实现Excel相同数据同一颜色,不同数据颜色交替显示

目录 1.效果图 2.具体代码实现 excel 读取工具类 excel写入和测试类 1.效果图 2.具体代码实现 excel 读取工具类 package utils; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util.Ar

POI导出EXCEL模板数据

1.apache poi 3.14+版本 package com.jd.medicine.erp.shop.service.util; import java.io.IOException; import java.io.InputStream; import java.util.Date; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import org.apa