POI的基础使用

  1. java动态生成下拉框属性,设置下拉框数据有效性
/*** 设置下拉框元素** @param firstRow 起始行* @param endRow   结束行* @param firstCol 起始列* @param endCol   结束列* @param list     下拉框选项* @return*/public static HSSFDataValidation setDataValidationList(short firstRow, short endRow, short firstCol, short endCol, String[] list) {//加载下拉列表内容DVConstraint constraint = DVConstraint.createExplicitListConstraint(list);//设置数据有效性加载在哪个单元格上。//四个参数分别是:起始行、终止行、起始列、终止列CellRangeAddressList regions = new CellRangeAddressList(firstRow, endRow, firstCol, endCol);//数据有效性对象HSSFDataValidation data_validation_list = new HSSFDataValidation(regions, constraint);return data_validation_list;}
  1. 设置标注信息
  /**** @param sheetlist 工作表对象* @param rownum 从0开始第几行* @param column 从0开始第几列* @param message 提示信息*/public static HSSFCell setCellComment(HSSFSheet sheetlist,int rownum,int column ,String message){//创建绘图对象HSSFPatriarch drawingPatriarch = sheetlist.createDrawingPatriarch();//给指定行列添加标注HSSFCell cell1 = sheetlist.createRow(rownum).createCell(column);//前四个参数是坐标点,后四个参数是编辑和显示批注时的大小.HSSFComment comment = drawingPatriarch.createComment(new HSSFClientAnchor(0, 1, 0, 1, (short) 2, 2, (short) 2, 3));comment.setString(new HSSFRichTextString(message));cell1.setCellComment(comment);return  cell1;}
  1. 设置单元格输入限制,如日期,数字,文本长度等格式
  /*** 设置必填项文本长度** @param sheetlist 需要操作的HSSFSheet* @param firstRow  起始行* @param endRow    结束行* @param firstCol  起始列* @param endCol    结束列* @param title     提示标题* @param message   提示信息* @return*/public static HSSFDataValidation setDataValidationView(HSSFSheet sheetlist, short firstRow, short endRow, short firstCol, short endCol, String title, String message) {//构造constraint对象//DVConstraint constraint = DVConstraint.createCustomFormulaConstraint("6");HSSFDataValidationHelper dvHelper = new HSSFDataValidationHelper(sheetlist);//构造constraint对象 设置有效性验证为 文本长度 最小长度为1DVConstraint constraint = (DVConstraint) dvHelper.createTextLengthConstraint(DataValidationConstraint.ValidationType.TEXT_LENGTH, "1", "20");//构造constraint对象 设置有效性验证日期,其他的也类似//dvHelper.createDateConstraint(参数)//四个参数分别是:起始行、终止行、起始列、终止列CellRangeAddressList regions = new CellRangeAddressList(firstRow, endRow, firstCol, endCol);//数据有效性对象HSSFDataValidation data_validation_view = new HSSFDataValidation(regions, constraint);//设置提示标题,内容data_validation_view.createPromptBox(title, message);//忽略空值data_validation_view.setEmptyCellAllowed(false);data_validation_view.createErrorBox("您输入信息或格式有误", "请按提示信息输入");//设置出错警告样式 0是停止 1是警告 2是信息data_validation_view.setErrorStyle(1);/*有的excel版本默认是falsedata_validation_view.setShowPromptBox(true);data_validation_view.setShowErrorBox(true);*/return data_validation_view;}
  1. XSSFDataValidation数据有效性版
 private static XSSFDataValidation setDataValidation(XSSFSheet sheet, String[] textList, int firstRow, int endRow,int firstCol, int endCol) {XSSFDataValidationHelper dvHelper = new XSSFDataValidationHelper(sheet);//不同点在于构造constraint对象的方式不一样XSSFDataValidationConstraint dvConstraint = (XSSFDataValidationConstraint) dvHelper.createExplicitListConstraint(textList);CellRangeAddressList addressList = new CellRangeAddressList((short) firstRow, (short) endRow, (short) firstCol, (short) endCol);XSSFDataValidation validation = (XSSFDataValidation) dvHelper.createValidation(dvConstraint, addressList);return validation;}
  1. 使用实例
/*** @param* @param filePath  Excel文件路径* @param* @param headers   Excel列标题(数组)* @param* @param downData  下拉框数据(数组)* @param* @param downRows  下拉列的序号(数组,序号从0开始)* @param messList  提示信息数组,从0开始* @param messDatas 提示信息内容* @return void* @throws String filePath, String sheetTitle, List<String> headers, Map<String,String[]> map, String[] fatherOption* @Title: testFunction* @Description: 生成Excel导入模板*/
public class DownExcelUtil {private static org.slf4j.Logger log = LoggerFactory.getLogger(JFileUtils.class);public static void createExcelTemplate(String filePath, String sheetTitle, List<String> headers, List<String[]> downData, List<String> downRows, List<String> messList, List<Map<String, String>> messDatas) throws Exception {HSSFWorkbook wb = new HSSFWorkbook();//excel文件对象//设置居中样式HSSFCellStyle cellStyle = wb.createCellStyle();cellStyle.setAlignment(HorizontalAlignment.CENTER);//cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);HSSFFont font = wb.createFont();font.setFontName("仿宋_GB2312");font.setFontHeightInPoints((short) 12);//工作表对象HSSFSheet sheetlist = wb.createSheet(sheetTitle);//设置脚标setCellComment(sheetlist,0,3,"请按正确格式输入身份证号!如:11013119940306312X");setCellComment(sheetlist,0,1,"请输入真实有效姓名如:张三");HSSFRow row = sheetlist.createRow(0);HSSFCell cell = row.createCell(0);//设置需要设置属性的sheetif (headers.size() > 0) {for (int i = 0; i < headers.size(); i++) {//设置字体cellStyle.setFont(font);cell.setCellStyle(cellStyle);cell.setCellValue(headers.get(i));//设置工作表单元格宽度sheetlist.setColumnWidth(i, 20 * 256);sheetlist.setDefaultColumnStyle(i, cellStyle);cell = row.createCell(i + 1);}log.info("设置sheet成功" + headers.size() + "条");}//判断下拉框序号个数设置下拉框属性if (downRows.size() > 0 && downData.size() == downRows.size()) {for (int i = 0; i < downRows.size(); i++) {short downRow = Short.parseShort(downRows.get(i));//得到验证对象HSSFDataValidation data_validation_list = DownExcelUtil.setDataValidationList((short) 1, (short) 5000, downRow, downRow, downData.get(i));sheetlist.addValidationData(data_validation_list);}log.info("设置下拉框属性值" + downRows.size() + "组");}//判断提示序列号组和提示信息if (messList.size() > 0 && messList.size() == messDatas.size()) {for (int i = 0; i < messList.size(); i++) {short messShort = Short.parseShort(messList.get(i));Map<String, String> messageMap = messDatas.get(i);Set<String> strings = messageMap.keySet();if (strings.size() == 1) {for (String string : strings) {HSSFDataValidation data_validation_view = DownExcelUtil.setDataValidationView(sheetlist, (short) 1, (short) 5000, messShort, messShort, string, messageMap.get(string));sheetlist.addValidationData(data_validation_view);}}}log.info("设置提示信息" + messList.size() + "组");}File f = new File(filePath);// 不存在则新增if (!f.getParentFile().exists()) {f.getParentFile().mkdirs();}if (!f.exists()) {f.createNewFile();}try {FileOutputStream out = new FileOutputStream(f);out.flush();//工作表添加验证数据wb.write(out);//关闭流out.close();log.info("工作表验证数据写入成功");} catch (Exception e) {log.info("工作表验证数据写入失败");e.printStackTrace();}}

java动态生成下拉框,标注信息,HSSFDataValidation和数据有效性等设置相关推荐

  1. vue动态生成下拉框_vue+elementui 动态创建下拉框

    v-for="(domain, index) in dynamicValidateForm.domains" :label="'站点' + index" :ke ...

  2. vue动态生成下拉框_解决vue动态下拉菜单 有数据未反应的问题

    问题出现在当时后台数据会返回到data中但是没有出现下拉菜单,查询资料 发现 Vue的this理解有误 jsp 下拉菜单 {{item.plantModelName}} JS new Vue({ el ...

  3. 生成下拉框的几种方法总结——数据来源:数据库

    下拉框的内容可以来自数据库.枚举.自己在程序中的定义等,我们今天来介绍一下先介绍来自数据库的数据进行下拉列表的实现. 使用场景:客户下拉列表等 1.确保数据库中有相关客户信息数据. 2.获取数据格式( ...

  4. Layui动态渲染下拉框

    本例包含测试页面代码,工具方法只有selectUtil <!DOCTYPE html> <html><head><meta charset="utf ...

  5. select2动态渲染下拉框以及下拉数据格式化

    //动态渲染下拉框 $('select[name="userid"]').html(getOption($userName, 'personname')).val('{$ITEM- ...

  6. thymeleaf(th:each th:selected) 从后台动态获取下拉框数据回显及选中

    thymeleaf(th:each th:selected) 从后台动态获取下拉框数据回显及选中 <select οnchange="getChilds(this.value)&quo ...

  7. chosen.jquery.js 、chosen-select 源码修改控制 chosen:updated 方法动态更新下拉框选项不更新搜索框值 ,chosen 实现远程搜索加载下拉选项

    chosen.jquery.js .chosen-select 源码修改控制 chosen:updated 方法动态更新下拉框选项不更新搜索框值,chosen 实现远程搜索加载下拉选项 chosen. ...

  8. fastadmin 动态赋值下拉框

    记录:fastadmin 动态赋值下拉框 html代码: <div class="form-group"><label class="control-l ...

  9. fastadmin mysql字段类型为set 自动生成下拉框

    数据库字段类型设置为 emum(单选)或者set(多选) 教程地址:数据库 - FastAdmin框架文档 - FastAdmin开发文档 数据库 文档最后更新时间:2019-12-27 21:40: ...

最新文章

  1. ganglia 监控mysql_Ganglia监控MySQL
  2. SQL Server中遍历表中记录的方法
  3. 皮一皮:真的是方法不对吗?
  4. sql left join用法_一张图看懂 SQL 的各种 join 用法!
  5. 没有bug队——加贝——Python 练习实例 13,14
  6. libevent源码深度剖析十二
  7. wince只运行一次应用程序
  8. 牛客 小a与星际探索 bfs
  9. thinkphp遗留问题
  10. Overloud TH3 for Mac(电吉他效果器)
  11. 基于单片机的无线病房呼叫系统设计
  12. 巨潮网怎么下载年报_如何下载上市公司的年度报告
  13. Pytest全栈自动化测试指南-入门
  14. 制作血条/蓝条/蓄力条等进度条(Progress Bar)
  15. Js基础——变量类型和计算
  16. 【金钱开道】直捣黄龙!
  17. cdr最新软件下载2023中文版电脑64位免费安装包
  18. 清末民初张家口地区服饰习俗变迁探研
  19. ubuntu优化详解
  20. 2021CSP-J1

热门文章

  1. 《看板和Scrum——相得益彰》读书笔记(二)
  2. gitkraken无法打开私有仓库的解决办法
  3. 服务器混合硬盘的优缺点是什么
  4. cad打印怎么布满图纸?打印图纸的办法说明
  5. 基于ICMP的反弹式木马研究与实现
  6. 求教 | SQL的count()函数里居然能加两个参数
  7. php通过时间戳处理时间!
  8. C语言 输入字符串,先序遍历生成二叉树
  9. 华为 手机 ROOT 或 CAM-UL00 ROOT 或 荣耀畅玩5A ROOT
  10. 四国军棋之十字斩字诀