poi操作Excel给列设置下拉菜单(数据验证)
效果图:
pom.xml文件增加依赖:
<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.0.1</version></dependency>
Workbook实现类有三个:HSSFWorkbook、XSSFWorkbook和SXSSFWorkbook,实现类不同,操作方法也不同
HSSFWorkbook
HSSFWorkbook读取操作Excel2003以前(包括2003)的版本,文件扩展名为 .xls,导出的数据最多为65535,优点:一般不会发生内存溢出
设置下拉菜单方式:
String[] strs = {"语文","数学","体育"};
DVConstraint constraint = DVConstraint.createExplicitListConstraint(strs);
//参数顺序:开始行、结束行、开始列、结束列
CellRangeAddressList regions = new CellRangeAddressList(1,objects.size()+1,9,9);
HSSFDataValidation data = new HSSFDataValidation(regions,constraint);
data.setSuppressDropDownArrow(false);
sheet.addValidationData(data);
XSSFWorkbook
XSSFWorkbook读取操作Excel2007以后(包括2007)的版本,文件扩展名为 .xlsx,导出的数据最多为1048576行,16384列,缺点:有可能发生内存溢出
设置下拉菜单方式:
String[] strs = {"语文","数学","体育"};
XSSFDataValidationHelper helper = new XSSFDataValidationHelper(sheet);
XSSFDataValidationConstraint constraint = (XSSFDataValidationConstraint)helper.createExplicitListConstraint(strs);
//参数顺序:开始行、结束行、开始列、结束列
CellRangeAddressList addressList = new CellRangeAddressList(1,objects.size()+1,8,8);
XSSFDataValidation validation = (XSSFDataValidation)helper.createValidation(constraint, addressList);
validation.setSuppressDropDownArrow(true);
validation.setShowErrorBox(true);
sheet.addValidationData(validation);
可以根据自己使用的Workbook的具体实现类来选择使用上面哪种方式为列添加数据验证。
SXSSFWorkbook
为了解决XSSFWorkbook有时会发生内存溢出应运而生的,在生成Workbook 时给工作簿一个内存数据存在条数:
Workbook wb = new SXSSFWorkbook(5000);
这样一旦这个Workbook中数据量超过5000就会写入到磁盘中,减少内存的使用量来提高速度和避免溢出。
其实,就算生成很小的excel(比如几Mb),它用掉的内存是远大于excel文件实际的size的。如果单元格还有各种格式(比如,加粗,背景标红之类的),那它占用的内存就更多了。对于大型excel的创建且不会内存溢出的,就只有SXSSFWorkbook了。它的原理很简单,用硬盘空间换内存(就像hash map用空间换时间一样)。
SXSSFWorkbook的工作方式决定了它只会保存最新的excel rows在内存里供查看,在此之前的excel rows都会被写入到硬盘里(Windows电脑的话,是写入到C盘根目录下的temp文件夹)。被写入到硬盘里的rows是不可见的/不可访问的。只有还保存在内存里的才可以被访问到。
SXSSF与XSSF的对比:
a. 在一个时间点上,只可以访问一定数量的数据
b. 不再支持Sheet.clone()
c. 不再支持公式的求值
d. 在使用Excel模板下载数据时将不能动态改变表头,因为这种方式已经提前把excel写到硬盘的了就不能再改了
当数据量超出65536条后,在使用HSSFWorkbook或XSSFWorkbook,程序会报OutOfMemoryError:Javaheap space;内存溢出错误。这时应该用SXSSFworkbook。
所以如果使用SXSSFWorkbook操作Excel就别玩那么多花里胡哨的,比如设置什么下拉菜单。
poi操作Excel给列设置下拉菜单(数据验证)相关推荐
- EXCEL学习-如何设置下拉菜单
制作思路: 1.先列示数据源内容 2.通过EXCEL工具选定数据源即可 路径: 数据 - 数据工具 - 数据有效性 - 设置允许序列/来源(√忽略空值/提供下拉箭头) 数据 - 数据工具 - 数据验证 ...
- Excel表格如何设置下拉选项并应用到整列
xcel表格中对于某一列需要进行判定,是或者否,如果每次都要一个一个输入,耗时又麻烦,此时我们可以对这一列设置下拉选项,每次选一下即可.今天就跟大家说一下Excel如何设置下拉选项并应用到整列. 一. ...
- excel添加列下拉框票价_Excel多行多列数据源下拉菜单-excel设置下拉菜单
数据有效性是神兽大家喜爱的一个Excel实用性功能 它不仅能够对单元格的输入数据进行条件限制,还可以在单元格中创建下拉列表菜单方便用户选择输入,如下图 它不仅可以通过下拉菜单快速准确的录入数据,还能在 ...
- excel添加列下拉框票价_如何在excel中设置下拉菜单
excel是日常办公中应用非常多的办公软件之一,其强大的数据统计.分析功能为工作带来不少方便.在EXCEL中设置下拉菜单,以方便输入相同内容.本文就以将性别设置为下拉菜单为例,介绍在excel中设置下 ...
- excel表格中如何设置下拉菜单
一. 直接自定义序列 用"数据/有效性"功能可以达到目的. 以选择性别为例,制作有男.女选项的下拉菜单: 选中"性别"数据区域: 执行"数据/有效性& ...
- 在excel的单元格中设置下拉菜单
很多时候我们在编辑excel的时候,在插入相同的内容时显得比较繁琐,下面教大家在excel单元格中设置下拉菜单,直接点击后更改单元格内容..步骤如下: 1.选中一列,然后点击菜单栏"数据&q ...
- 小福利,带你快速入门sumifs多条件求和函数、设置下拉菜单结合vlookup函数双条件查找数据、excel的切片器(表关联)、数据透视表、数据透视图
第一部分:利用sumifs函数求得双条件下的求和值 如题,现在需要根据下拉菜单年份和商品来查找利润, 第一步,在年份H3设置数据验证,分别是2019,2020,2021 第二步,在商品H4设置数据验证 ...
- excel设置下拉菜单,并且不同值会显示不同颜色
工作中常常要用的excel,每次都会有新的需求,然后不会,然后百度,然后过段时间可能就又忘了,于是就想说,自己记录下来~~~因为自己用的都是2010,其实哪个版本都差不多,都是应该可以找到相应的按钮滴 ...
- Excel实现单元格下拉菜单并设置变色
1. 下拉设置 (1)选择要设置的单元格 ,譬如A1单元格: (2)选择菜单栏的"数据"→"有效性"→出现"数据有效性"弹出窗口 : ...
- excel中如何设置下拉框,并且不同值显示不同颜色
源地址: http://blog.163.com/s_zhchluo/blog/static/1501470820139172232473/ (一)excel中如何设置下拉框 (excel 2010) ...
最新文章
- Keepalived原理与实战精讲
- Java8 forEach
- 特种部队【动态规划】
- OPC的数据访问方法分别有同步访问、异步访问和订阅式
- 签约中国搜索,第四范式助力智慧媒体转型发展
- 图卷积神经网络(part1)--卷积概述
- chrome密码管理
- python创建虚拟环境命令_python 创建虚拟环境
- 哈希表存在的问题及解决方案
- 【Java】 剑指offer(4) 替换空格
- python报表自动化系列 - 在Windows中打开指定目录
- shell逻辑运算符优先级_linux shell 逻辑运算符、逻辑表达式详解
- java sql2000驱动下载_SQL Server 2000 JDBC驱动程序
- 计算机的硬盘配额如何更改,磁盘配额是什么怎么设置
- 订单超时、定时任务解决方案和思路
- ui-bootstrap-tpls 中文 现在还不全的啊~,组件太多了,有空就更新
- 王争-算法与数据结构专栏第一期福利笔记(数据结构与算法学习书单)
- 使用Audacity软件对清浊音进行时频分析并描述其特点
- 【天池】金融风控-贷款违约预测(五)—— 模型融合
- Visual C++ Redistributable for VS2005/VS2008/VS2010/VS2012/VS2013/VS2015/VS2017/VS2019 下载地址