博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POI设置excel添加列下拉框
阅读量:6678 次
发布时间:2019-06-25

本文共 2958 字,大约阅读时间需要 9 分钟。

POI在生成excel模板时需要为列添加下拉框,我写了两个方法。

@ 方法一:适用任何情况,不受下拉框值数量限制。但是需要通过引用其它列值。

思路大概如下:

1.创建一个隐藏的sheet页,用于存放下拉框的值。

HSSFSheet listSheet = workBook.createSheet("ShtDictionary");//隐藏的sheet,用于存放下拉框的限定值

2.将下拉框的值放置在隐藏sheet【ShtDictionary】某列

//rows表示下拉框限定值的个数 for(int i = 0 ;i

3.添加下拉框引用

setHSSFValidation(HSSFSheet sheet,String sheetName, int lastRow,String col, int firstRow, int endRow, int firstCol, int endCol)

  @ 自定义方法详解

/**      * 设置某些列的值只能sheet中某列输入预制的数据,显示下拉框.      * @param HSSFSheet sheet 模板sheet页(需要设置下拉框的sheet)      * @param String sheetName 隐藏的sheet页,用于存放下拉框的值 (下拉框值对应一列)     * @param int lastRow 存放下拉框值的最后一行     * @param String col 存放下拉框值的列名 "A"     * @param int firstRow  添加下拉框对应开始行      * @param int endRow    添加下拉框对应结束行      * @param int firstCol  添加下拉框对应开始列      * @param int endCol    添加下拉框对应结束列      * @return HSSFSheet 设置好的sheet.      */      public static HSSFSheet setHSSFValidation(HSSFSheet sheet,String sheetName, int lastRow,String col, int firstRow, int endRow, int firstCol, int endCol){           //设置数据有效性加载在哪个单元格上,四个参数分别是:起始行、终止行、起始列、终止列           CellRangeAddressList regions = new CellRangeAddressList(firstRow, endRow, firstCol, endCol);         String cell = "\""+sheetName +"!$"+col+"$1:$"+col+"$"+lastRow+"\"";         System.out.println("下拉框列:"+cell);         // 这句话是关键 引用ShtDictionary 的单元格         DVConstraint constraint = DVConstraint.createFormulaListConstraint("INDIRECT("+cell+ ")");         HSSFDataValidation dataValidate = new HSSFDataValidation(regions, constraint);         sheet.addValidationData(dataValidate);         return sheet;     }

@ 方法二 :此方法仅仅使用下拉框值不超过232个的情况,优点是简单。

1.将下拉框的值存放在自定义的一个数组对象中 String[] textList

String[] textlist = ...;//下拉框显示的内容

 2.添加下拉框引用

setHSSFValidation(HSSFSheet sheet, String[] textlist, int firstRow, int endRow, int firstCol, int endCol);

@ setHSSFValidation

/**      * 设置某些列的值只能输入预制的数据,显示下拉框.      * @param HSSFSheet sheet  模板sheet页(需要设置下拉框的sheet)       * @param String[] textlist 下拉框显示的内容      * @param int firstRow  添加下拉框对应开始行      * @param int endRow    添加下拉框对应结束行      * @param int firstCol  添加下拉框对应开始列      * @param int endCol    添加下拉框对应结束列      * @return HSSFSheet 设置好的sheet.      */      public static HSSFSheet setHSSFValidation(HSSFSheet sheet, String[] textlist, int firstRow, int endRow, int firstCol, int endCol){          // 设置数据有效性加载在哪个单元格上,四个参数分别是:起始行、终止行、起始列、终止列          CellRangeAddressList regions = new CellRangeAddressList(firstRow,endRow, firstCol, endCol);          // 加载下拉列表内容          DVConstraint constraint = DVConstraint.createExplicitListConstraint(textlist);          // 数据有效性对象          HSSFDataValidation data_validation_list = new HSSFDataValidation(regions, constraint);          sheet.addValidationData(data_validation_list);          return sheet;      }

 @ 数据有效性对象【HSSFDataValidation】的相关方法:

// 设置提示内容,标题,内容 void org.apache.poi.hssf.usermodel.HSSFDataValidation.createPromptBox(String title, String text);

转载于:https://www.cnblogs.com/zhutouying/p/3447309.html

你可能感兴趣的文章
我封装的全文检索之solr篇
查看>>
NFC的第一次接触
查看>>
RHEL7 Connection closed by foreign host.
查看>>
Nodejs开发框架之Loopback介绍
查看>>
微信小程序下拉刷新使用整理
查看>>
ubuntu12.04禁用客人会话
查看>>
我的友情链接
查看>>
JVM垃圾收集器与内存分配策略
查看>>
分析Linux 文件系统访问控制列表
查看>>
Confluence WIKI 安装、破解及添加汉化包(Windows)
查看>>
一起入门Citrix_XenDesktop7系列 二-- 跟着图片通过XenDesktop7交付(发布)应用与共享桌面...
查看>>
MyBatis学习手记(一)MaBatis入门
查看>>
SCTF-2014 writeup(部分)
查看>>
Elasticsearch 连接查询
查看>>
Retrofit入门
查看>>
设置Exchange 通讯组接收外部组织邮件
查看>>
观点:正在消逝的运维江湖
查看>>
istio 监控,遥测 (理论)
查看>>
Oracle insert 多条记录
查看>>
Python学习-baseNo.2
查看>>