首页 >excel操作 > 内容

Java使用POI生成带验证数据的Excel(POI创建带下拉数据的单元格)

2023年7月8日 10:26

一、概述

同学们新年快乐,好久不见,甚是想念。今天带大家了解一个Java常用的工具库POI的使用细节。

POI的教程确实已经烂大街了, 百度一搜一把,这里对POI的使用不做过多的介绍,使用步骤比较固定就是那几步比较简单。今天说说实际项目中的一个痛点场景:用户使用Excel上传数据,做过类似需求的同学应该知道,用户输入的东西根本不可控,经常一顿乱输入,后台对数据校验做的再好,也不能完美解决。这里可以通过给Excel添加数据验证功能单元格下拉选择数据),避免用户的无效输入。

二、添加POI依赖

<dependency>    <groupId>org.apache.poi</groupId>    <artifactId>poi-ooxml</artifactId>    <version>5.2.0</version></dependency>

三、使用

POI的基础使用:创建工作簿、创建工作表、创建行、创建单元格、设置样式、生成Excel文件的API可以参考其他教程学习,请先了解后再看下面内容,后面会有完整代码。

  1. 创建验证内容对象;
  2. 创建单元格范围对象(指定范围:通常是一列);
  3. 使用验证内容对象和校验范围对象创建验证规则对象,可以设置错误提示内容;
  4. 将规则对象添加到工作表。

关键代码如下:(validData是需要验证的字符串数组,index是的第几列索引)

// 设置验证数据内容DVConstraint constraint = DVConstraint.createExplicitListConstraint(validData);// 设置需要验证的单元格范围(范围:1-60000行的第几列到第几列设置)CellRangeAddressList rangeAddressList = new CellRangeAddressList(1, 60000, index, index);// 创建数据验证规则对象DataValidation dataValidation = new HSSFDataValidation(rangeAddressList, constraint);// 设置验证对象错误提示内容dataValidation.createErrorBox("error", "请选择正确的数据");// 将工作表添加验证对象sheet.addValidationData(dataValidation);

四、实践

需求:创建个人信息的Excel模板,里面的性别和身份需要设置可下拉的验证数据

代码比较简单直接上完整代码

public class ExcelTest {    public static void main(String[] args) throws IOException {        ExcelTest test = new ExcelTest();        test.createExcel();    }    public void createExcel() throws IOException {        //创建工作簿对象        HSSFWorkbook wb = new HSSFWorkbook();        // 创建工作表        HSSFSheet sheet = wb.createSheet("个人信息");        // 设置默认列宽        sheet.setDefaultColumnWidth(18);        // 表头数据        String[] tileList = new String[]{"姓名", "年龄", "性别", "身份"};        // 创建表头行-并设置表头内容        HSSFRow row = sheet.createRow(0);        // 创建样式        HSSFCellStyle style = getHeaderStyle(wb);        HSSFCell cell = null;        for (int i = 0; i < tileList.length; i++) {            String title = tileList[i];            // 创建单元格            cell = row.createCell(i);            // 设置单元格内容            cell.setCellValue(title);            // 设置单元格样式            cell.setCellStyle(style);        }        // ***********下面是重点********        // 设置性别下拉数据        String[] sixData = {"男", "女", "不男不女", "其他"};        // 添加数据验证        setDataValid(sheet, sixData, 2);        // 设置身份下拉数据        String[] faceData = {"高富帅", "白富美", "矮穷帅", "黑穷美", "矮穷丑"};        // 添加数据验证        setDataValid(sheet, faceData, 3);        // ***********上面是重点********        FileOutputStream out = new FileOutputStream(new File("D:\\123.xls"));        wb.write(out);        wb.close();    }    private void setDataValid(HSSFSheet sheet, String[] validData, int index) {        // 设置验证数据内容        DVConstraint constraint = DVConstraint.createExplicitListConstraint(validData);        // 设置需要验证的单元格范围(范围:1-60000行的第几列到第几列设置)        CellRangeAddressList rangeAddressList = new CellRangeAddressList(1, 60000, index, index);        // 创建数据验证规则对象        DataValidation dataValidation = new HSSFDataValidation(rangeAddressList, constraint);        // 设置验证对象错误提示内容        dataValidation.createErrorBox("error", "请选择正确的数据");        // 将工作表添加验证对象        sheet.addValidationData(dataValidation);    }    // 设置单元格样式    private static HSSFCellStyle getHeaderStyle(HSSFWorkbook wb) {        HSSFCellStyle cellStyle = wb.createCellStyle();        cellStyle.setAlignment(HorizontalAlignment.CENTER);//水平居中        cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);//垂直居中        //cellStyle.setWrapText(true);//自动换行        HSSFFont font = wb.createFont();        font.setFontName("宋体");//设置字体名称        font.setFontHeightInPoints((short) 12);//字体大小        font.setBold(true);        cellStyle.setFont(font);        return cellStyle;    }}

效果

(完~)


参考文章:https://blog.csdn.net/javaYouCome/article/details/122919981

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时候联系我们修改或删除,在此表示感谢。

特别提醒:

1、请用户自行保存原始数据,为确保安全网站使用完即被永久销毁,如何人将无法再次获取。

2、如果上次文件较大或者涉及到复杂运算的数据,可能需要一定的时间,请耐心等待一会。

3、请按照用户协议文明上网,如果发现用户存在恶意行为,包括但不限于发布不合适言论妄图

     获取用户隐私信息等行为,网站将根据掌握的情况对用户进行限制部分行为、永久封号等处罚。

4、如果文件下载失败可能是弹出窗口被浏览器拦截,点击允许弹出即可,一般在网址栏位置设置

5、欢迎将网站推荐给其他人,网站持续更新更多功能敬请期待,收藏网站高效办公不迷路。

      



登录后回复

共有0条评论