Java 导出excel,大量数据下拉(有效性)

Java 导出excel,大量数据下拉

在做excel下拉时,当下拉数据少时,直接定义字符数据,进行操作下拉数据。但是当需要下拉的数据达到一定量的时候,会发现下拉的数据为空。那么就需要我们换一种方式进行操作了。

使用依赖

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

导出excel基本技能

1、创建excel

//创建excel的管理组件
XSSFWorkbook wb = new XSSFWorkbook();
//sheetName
Sheet sheet = wb.createSheet("sheetName");
//创建行  从0开始
Row row = sheet.createRow(0);
//创建列 也是从0开始 这时候可以看出定位来了 第一行第一列数据内容为cell内容
row.createCell(0).setCellValue("cell内容");
//各个单元格也是可以合并的		
CellRangeAddress rangeAddress = new CellRangeAddress(开始行(integer), 结束行(integer), 开始列(integer), 结束列(integer));
sheet.addMergedRegionUnsafe(rangeAddress);	//合并参数

2、创建下拉组件

DataValidationHelper helper = sheet.getDataValidationHelper();// 设置下拉数据属性
//设置下拉作用域
CellRangeAddressList cellRangeAddressList = new CellRangeAddressList(开始行, 结束行, 开始列, 结束列);
//下拉的数据 参数字符串数组(数据量少时使用)
DataValidationConstraint explicitListConstraint = helper.createExplicitListConstraint(strArray);
DataValidation validation = helper.createValidation(explicitListConstraint,cellRangeAddressList);
if (validation instanceof XSSFDataValidation) {
	validation.setSuppressDropDownArrow(true);
	validation.setShowErrorBox(true);
} else {
	validation.setSuppressDropDownArrow(false);
}
validation.setShowErrorBox(true);
validation.setErrorStyle(DataValidation.ErrorStyle.STOP);
//将下拉属性放入sheet文件里
sheet.addValidationData(validation);

大批量数据下拉

大批量数据下拉,将下拉数据放在字符串数组中进行下拉,会发现下拉数据为空;我们采用将数据放入另一个sheet页,然后进行配置有效性进行下拉数
//创建隐藏sheet页 将下拉内容存入
Sheet hideSheet = wb.createSheet("hideSheet");
wb.setSheetHidden(wb.getSheetIndex(hideSheet), true);
//list(String)
for (int i = 0; i < list.size() ; i++) {
	Row row = hideSheet.createRow(i);
	row.createCell(0).setCellValue(list.get(i));
}
DataValidationHelper dataValidationHelper = sheet.getDataValidationHelper();
//注意:通过有效性获取隐藏表数据,行列都是从1开始的
		DataValidationConstraint formulaListConstraint1 = dataValidationHelper.createFormulaListConstraint(("hideSheet!$A$1:$A + "$" + list.size()));
		//a:隐藏表的开始行  b:隐藏表的结束行
		CellRangeAddressList regions = new CellRangeAddressList(a, b, StartCell, endCell);
		DataValidation validation = dataValidationHelper.createValidation(formulaListConstraint1, regions);
		validation.setShowPromptBox(true);
		validation.setEmptyCellAllowed(false);
		validation.setErrorStyle(DataValidation.ErrorStyle.STOP);
		//将有效性数据放入引用sheet页上面
		sheet.addValidationData(validation);
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值