别再瞎摸索!POI 操作 Excel 轻松添加下拉框

POI操作EXCEL增加下拉框

依赖

xml 复制代码
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>4.1.2</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>4.1.2</version>
</dependency>

有时候通过excel将数据批量导入到系统,而业务操作人员对于一些列不想手动输入,而是采用下拉框的方式来进行选择

采用隐藏sheet页的方式来进行操作

java 复制代码
String sheetName = "supplier_hidden_sheet";

HSSFSheet supplierSheet = workbook.createSheet(sheetName);//隐藏的sheet,用于存放下拉框的限定值
int count = 0;
for(String supplierName : suppliers){
    supplierSheet.createRow(count++).createCell(0).setCellValue(supplierName);
}
      
String col = "A";

//设置数据有效性加载在哪个单元格上,四个参数分别是:起始行、终止行、起始列、终止列
CellRangeAddressList regions = new CellRangeAddressList(1, dataList.size(), supplierColumn, supplierColumn);
// 这是表示从隐藏sheet页的哪列哪行到哪列哪行  如该格式 supplier_hidden_sheet!$A$1:$A$73 
String cell = "\""+sheetName +"!$"+col+"$1:$"+col+"$"+suppliers.size()+"\"";
// 引用ShtDictionary 的单元格
DVConstraint constraint = DVConstraint.createFormulaListConstraint("INDIRECT("+cell+ ")");
// 数据检验为该格式  =INDIRECT("supplier_hidden_sheet!$A$1:$A$73")
HSSFDataValidation dataValidate = new HSSFDataValidation(regions, constraint);
sheet.addValidationData(dataValidate);
workbook.setSheetHidden(1,true);

可以在EXCEL中的数据有效性看到数据来源

参考文献

相关推荐
newerp1 天前
pprof 火焰图(Flame Graph)阅读与热点代码重构实战
后端·程序员·go
SimonKing1 天前
Qoder中Qwen3.8-Flash 限时免费使用
java·后端·程序员
爱勇宝1 天前
裁员裁掉了那个干了14年的人:我这才看清职场的5条潜规则
前端·后端·程序员
Hilaku1 天前
GraphQL 在国内为什么水土不服?
前端·javascript·程序员
Codiggerworld1 天前
寒露·Codigger
大数据·程序员·节日
CodeSheep1 天前
朋友面试谈薪报价2w,HR非得压到1.9,还反问他:你就差这1000块钱?后来背调时问了他前同事十几个问题,对方最后直接挂了
前端·后端·程序员
阿瑞IT2 天前
企业知识库为什么越建越难用?从知识沉淀到权限检索的五种实现路径
程序员
newerp2 天前
sync.Mutex 源码深度拆解:正常模式(自旋)与饥饿模式
后端·程序员·go
掘金012 天前
0 元把联想平板变成 MacBook 副屏:真扩展、支持触控、纯开源
程序员·产品
挖掘狂人2 天前
从 Agent Loop 到沙盒边界:一次讲清楚 Codex 的八大功能
程序员·openai·agent