需求:

在导入页面放置了的Excel模板,最开始内容是写死的。现在需要将数据库的数据动态的加载到excel模板的下拉框中。使用的为poi.xssf

相关jar包

poi-3.10-FINAL-20140208.jar
poi-ooxml-3.10-FINAL-20140208.jar
poi-ooxml-schemas-3.10-FINAL-20140208.jar

方法思路:

读取Excel模板文件——从数据库读取下拉框所需数据——将读取出的数据先写入另一张sheet(数据源sheet)——为展示数据的sheet设置数据验证规则,增加数据验证——将更新后的workbook保存到新的path

该方法返回path到controller,之后经过文件流处理即可实现模板的下载

     /*** update poi select * @param realPath* @author cloudHeart* @throws FileNotFoundException */public String setPOISelect(String realPath) throws FileNotFoundException {InputStream is = null;XSSFWorkbook wb = null;//读取文件 try {is = new FileInputStream(new File(realPath));wb = new XSSFWorkbook(is);XSSFSheet sheet = wb.getSheetAt(0);int rows = sheet.getLastRowNum() + 1; //行数System.out.println("rows = " + rows);//设置部门下拉框ArrayList<String> orgNameList = new ArrayList<>(30);List<Org> orgList = dao.findAll();for (Org one : orgList) {String name = one.getOrgName();orgNameList.add(name);}String[] orgArray = orgNameList.toArray(new String[orgNameList.size()]); wb = selectUpda're(wb, sheet, orgArray, 2, 9, 1, 1, 2, 'B');
         //由于POI打开读取文件后再保存时bug问题, 只能重新定义一个新的Excel写入数据  String subPath = realPath.substring(0, realPath.lastIndexOf("\\"));String path = subPath.concat("\\模板");createExcel(wb, path);return path;} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}return realPath; }

因为可能更新多个不同类型下拉框数据,所以设置了selectNum和selectAlpha

 /*** @param wb XSSFWorkbook对象* @param realSheet 需要操作的sheet对象* @param datas 下拉的列表数据* @param startRow 开始行* @param endRow 结束行* @param startCol 开始列* @param endCol 结束列* @param selectMum 数据源sheet的下拉数据源对应列* @param selectAlpha 数据源sheet的下拉数据对应字母* @return* @throws Exception*/public XSSFWorkbook dropDownList2003(XSSFWorkbook wb, XSSFSheet realSheet, String[] datas, int startRow, int endRow,int startCol, int endCol, int selectNum ,char seletAlpha)throws Exception {String hiddenSheetName = "字典项";// XSSFWorkbook workbook = (XSSFWorkbook) wb;// 数据源sheet 原模板已有专门的数据源sheet,没有的话用 wb.createSheet("名称")创建一个即可XSSFSheet hidden = (XSSFSheet) wb.getSheetAt(1);// 数据源sheet页不显示wb.setSheetHidden(1, true);// 将下拉列表的数据放在数据源sheet上XSSFRow row = null;XSSFCell cell = null;for (int i = 0, length = datas.length; i < length; i++) {//row = hidden.createRow(i);row = hidden.getRow(i);if(row == null || ("").equals(row)){row = hidden.createRow(i);}cell = row.getCell(selectNum-1);if(cell == null || ("").equals(cell)){cell = row.createCell(selectNum -1);}cell.setCellValue(datas[i]);}   //创建规则XSSFDataValidationHelper dvHelper = new XSSFDataValidationHelper(realSheet);XSSFDataValidationConstraint dvConstraint = (XSSFDataValidationConstraint) dvHelper.createFormulaListConstraint(hiddenSheetName + "!$"+seletAlpha+"$1:$"+seletAlpha+"" + datas.length);//DataValidationConstraint  constraint = DVConstraint.createFormulaListConstraint(hiddenSheetName + "!$"+seletAlpha+"$1:$"+seletAlpha+"" + datas.length);CellRangeAddressList addressList = null; // 设定在哪个单元格生效  DataValidation validation = null; // 创建规则对象  row = null;cell = null;// 循环指定单元格下拉数据for (int i = startRow; i <= endRow; i++) {row = (XSSFRow) realSheet.getRow(i);cell = row.getCell(startCol); addressList = new CellRangeAddressList(i, i, startCol, endCol);validation = dvHelper.createValidation(dvConstraint, addressList);//validation = new HSSFDataValidation(addressList, constraint);//HSSF和XSSF的创建数据验证有区别 realSheet.addValidationData(validation);realSheet.addValidationData(validation);}return wb;}

根据路径创建Excel

/** * 根据路径创建Excel * @param workbook * @param path */  public void createExcel(Workbook workbook, String path) {  FileOutputStream fileOut = null;  try {  fileOut = new FileOutputStream(path);  workbook.write(fileOut);  } catch (Exception e) {  logger.error("Error create excel: ", e.getMessage());  } finally {  try {  if(fileOut != null) {  fileOut.close();  }  } catch (IOException e) {  e.printStackTrace();  }  }  } 










												

POI——动态修改Excel模板下拉框相关推荐

  1. PB 动态修改数据窗口下拉框的值(DropDownListBox)

    GIF:效果图 源码: string ls_value,ls_colnamels_colname = 'a' //字段名称//如果字段不是DropDownListBox下拉框,需要改变Edit中的St ...

  2. Vue+SpringBoot 实现Excel表下拉框与模板文件下载

    最近做的项目需要实现该功能,经过查找相关博客,故在此做整理. 一.前端 1.在A.service.js文件中 import axios from 'axios' // 业务服务上下文 const ba ...

  3. java导出Excel增加下拉框选项,解决小数据量和大数据量下拉框选项的问题

    文章目录 java导出Excel增加下拉框选项 一.小数据量情况 二.大数据量情况 java导出Excel增加下拉框选项(java结合easyExcel) 添加传参模型ConsumablesAddDT ...

  4. html select 样式t调整_css修改html select下拉框样式(含右边箭头)

    css修改html select下拉框样式(含右边箭头)2017-10-12 16:51 我们经常会看到一些页用用的select下拉框非常漂亮,其实很多是用插件实现的. 如果不使用插件,靠纯css能不 ...

  5. Thinkphp5中使用PhpSpreadsheet实现excel特定下拉框联动模板的生成

    前言: 最近有遇到过这样的项目需求,需要导出 excel 模板的时候在模板中内置好需要联动的下拉框选择功能,这样在进行excel填写的时候可以进行选择内置的内容. 这里就是进行联动选择的,省.市.区三 ...

  6. Java实现后端生成excel表格模板--下拉框实现

    实现方法: //创建下拉框private static void creatDropDownList(Sheet taskInfoSheet, DataValidationHelper helper, ...

  7. Excel 设置下拉框-显示中文而实际数字

    最近在用excel做数据的导入,显示的值和数据库存放值有所差别,需要进行翻译,这里运用excel自带的功能来实现,显示中文,实际数字. Excel 版本:2019 第一步.设置下来框显示 在excel ...

  8. ExcelJS 导入导出excel带下拉框筛选数据

    import ExcelJS from "exceljs"; 配上文档地址 下载方法 //数据格式 deviceJson:{         't(数据类型)':[{value:0 ...

  9. Excel怎么下拉框多选

    打开Exlce, 确定,然后 右击查看代码,把这段代码复制到新建的文件里面 此时Excel会给出提示,选择否,,系统会提示保存,在保存的时候选择启用宏的工作簿然后保存,此时Excel下拉框多选就搞定了 ...

最新文章

  1. iframe 父页面与子页面之间的方法的相互调用
  2. 二 Array 数组常用操作方法
  3. centos安装ES(elasticsearch)
  4. AngularJS分层开发
  5. 什么叫事务?Java如何处理事务呢?
  6. 用DELETE删除的文件怎么免费找回不用购买不用注册码
  7. python post参数传递不成功_Python中的API构建指南:在Flask中进行API开发
  8. 企业全面运营管理沙盘模拟心得_任景锋-企业全面运营管理沙盘模拟
  9. 【Mendeley】自定义文献引用格式(cite style)并保存
  10. matlab将数据集分成训练集和测试集,Matlab实现 把数据集X分割成训练集和测试集...
  11. 阿里聚石塔限制IP 过部署服务器详细流程
  12. Windows Server2012搭建Git服务器
  13. HTML与Java组合使用_【自学java笔记#第五十四天#】javaweb day02 html和css的组合使用...
  14. 朱啸虎的“合并盈利论”,实为ofo抢道摩拜带节奏
  15. 钉钉如何调整组织架构_[钉钉组织架构设置]如何设置组织架构 组织架构设置的五个步骤...
  16. 微信小程序的socket.io即时通讯开发(基于E聊SDK)
  17. 高效的 Linux 限流神器Trickle
  18. 提高浏览器渲染页面速度
  19. 通过百度API获取城市经纬度(1)
  20. 相振幅耦合 matlab6,课程设计基于MATLAB的2×2光纤定向耦合器设计.doc

热门文章

  1. 使用http-server开启本地静态资源服务
  2. 【BZOJ4849】[Neerc2016]Mole Tunnels(模拟费用流)
  3. 某 CSP 模拟赛 T1 金币(coin)
  4. MySQL数据库迁移方法
  5. PS学习-夜景与建筑综合处理(一)--制作唯美的光斑效果(大光圈)
  6. Tomcat无法成功启动的解决方案
  7. “元宇宙”到底是啥?为啥火了?鼓励探索警惕忽悠
  8. LT9211 RGB转LVDS芯片 方案成熟 提供技术支持
  9. 爬虫 与反爬虫 及其应对措施
  10. 干货!设备管理包括哪些内容?