java导出excel搜索下拉框,POI写入Excel下拉框[Select选项]

记录部分方法, 操作POI

POI version

3.10-FINAL

org.apache.poi

poi

${poi.version}

org.apache.poi

poi-ooxml

${poi.version}

1.首先根据路径读取Excel模板

/**

* 读取服务器上面的上传的excel文件

*

* @param path

* @return

*/

public static Workbook readWorkBook(String path) {

Workbook wb = null;

try {

wb = WorkbookFactory.create(new File(path));

} catch (InvalidFormatException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

return wb;

}

2.获取到workbook后,设置哪些行列是下拉框[Select下拉],并设置数据

public String rewriteExcelTempAtEmp(String instance, String path, String upload) {

//读取默认模板Excel文件

Workbook workbook = ExcelUtils.readWorkBook(path);

Sheet sheet = workbook.getSheetAt(0);

DataValidationHelper helper = sheet.getDataValidationHelper();

//CellRangeAddressList(firstRow, lastRow, firstCol, lastCol)设置行列范围

CellRangeAddressList addressList = new CellRangeAddressList(3, 500, 17, 17);

//设置下拉框数据

String[]pos = posStatusName(instance);

DataValidationConstraint constraint = helper.createExplicitListConstraint(pos);

DataValidation dataValidation = helper.createValidation(constraint, addressList);

//处理Excel兼容性问题

if(dataValidation instanceof XSSFDataValidation) {

dataValidation.setSuppressDropDownArrow(true);

dataValidation.setShowErrorBox(true);

}else {

dataValidation.setSuppressDropDownArrow(false);

}

sheet.addValidationData(dataValidation);

String fileName = StringUtils.substringAfterLast(path, "/");

String newPath = upload+ExcelUtils.getRename(fileName, false);

//由于POI打开读取文件后再保存时bug问题, 只能重新定义一个新的Excel写入数据

ExcelUtils.createExcel(workbook, newPath);

return newPath;

}

3.由于workbook读取后,在保存原来excel会出现错误,这个是poi的一个小bug吧,官方

也没有看到怎么解释,只能修改后, 重新命名保存一个新的Excel模板

/**

* 根据路径创建Excel

* @author lance

* 2014年8月13日 下午4:06:10

* @param workbook

* @param path

*/

public static 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();

}

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/334408.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

openssh rpm包_100台CentOS7要升级OpenSSH怎么办?

背景现在有 100 台 Centos7 需要升级 OpenSSH 到 8.3,怎么办呢?一台台的操作显然不符合我摸鱼的风格,既然每台操作都一样,Ansible Roles 就有用武之地了。正常升级流程首先 rpmbuild 打出 OpenSSH 8.3 的 RPM 包,rpm -…

java 从一个容器获取对象,如何从 Spring IoC 容器中获取对象?

前面几篇文章主要分析了 Spring IoC 容器如何初始化,以及解析和注册我们定义的 bean 信息。其中,「Spring 中的 IoC 容器」对 Spring 中的容器做了一个概述,「Spring IoC 容器初始化」和「Spring IoC 容器初始化(2)」分析了 Spring 如何初始化…

thymeleaf与jsp_PagingAndSortingRepository –如何与Thymeleaf一起使用

thymeleaf与jsp在本教程中,我将演示如何通过分页显示Thymeleaf中的企业客户列表。 1 –项目结构 我们有一个正常的Maven项目结构。 2 –项目依赖性 除了正常的Spring依赖关系之外,我们还添加Thymeleaf和hsqldb,因为我们使用的是嵌入式数据…

MySQL 数据库中如何将表字段的空值全部替换成空字符串

UPDATE permissions SET name ( CASE WHEN IFNULL(name, ) THEN ELSE name END ) WHERE name IS NULL;

python requests是什么_如何基于Python + requests实现发送HTTP请求

这篇文章主要介绍了如何基于Python requests实现发送HTTP请求,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一、在接口自动化测试过程中,存在两种情况: 一种是不需要鉴权的接口&#…

MySQL 批量生成 SQL 脚本语句解决实际的业务需求/如何拼接字符串/拼接字符串的 SQL 语句

文章目录实际需求分析思路写拼接 SQL 脚本的脚本语句执行得到脚本语句保存成 SQL 脚本文件实际需求 有些行政区域的字段 area_fullname 是空的,如何补全呢?如下所示: 分析思路 (一)如何取到每个区域的上级名称和上…

php的变量都放在哪里,php变量一般放在哪个位置

php变量一般放在哪个位置php定义变量的要求格式,是非常宽松的,至于在哪里定义变量就需要看你的需求,可以在构造函数,也可以在你定义的方法中定义局部变量,也可以在构造函数外面定义全局变量。// 局部变量 函数内部func…

oauth2令牌刷新_了解OAuth2令牌认证

oauth2令牌刷新1.简介 在本教程中,我们将了解OAuth2令牌身份验证 ,以便只有经过身份验证的用户和应用程序才能获得有效的访问令牌,该令牌随后可用于访问服务器上的授权API(在OAuth术语中仅是受保护的资源)。 使用基于…

整型数组 判断 java,给定一个整数数组,判断其中是否有3个数和为N

借助集合将复杂度降到n2,但耗时还是比较长。 import java.util.HashMap;import java.util.HashSet;import java.util.Scanner;/*** Author: coderjjp* Date: 2020-05-07 8:40* Description:给定一个整数数组,判断其中是否有3个数和为N* version: 1.0*/public class …

jsap支付_Java命令行界面(第20部分):JSAP

jsap支付JSAP ( Java Simple Argument Parser )2.1是本系列文章的第二十篇,重点是处理Java的命令行参数。 JSAP页面描述了该库存在的原因:“我在Internet上找到了多个解析器,所有解析器都处理了开关,但是没…

QPW 行政区划字典表(td_area)

行政区划字典表 CREATE TABLE td_area (area_code varchar(10) NOT NULL COMMENT 区域编码,area_name varchar(50) DEFAULT NULL COMMENT 区域名称,area_fullName varchar(300) DEFAULT NULL COMMENT 区域全称,is_hot tinyint(2) DEFAULT 0 COMMENT 是否热门, # 0-否&#xff…

python语句大全input_input提示文字 Python基础输入函数,if-else语句,if-elif

input()函数 此功能用于获取用户输入。 (调用1)input后,程序将立即暂停并等待用户输入。在用户完成内容输入后,单击Enter,程序将继续向下执行。 例如: input() (2&#x…

Linux 命令之 lsusb -- 显示本机的USB设备列表信息

文章目录命令介绍常用选项命令示例(一)显示 USB 设备详细信息命令介绍 lsusb命令用于显示本机的USB设备列表,以及USB设备的详细信息。 lsusb命令显示的USB设备信息来自“/proc/bus/usb”目录下的对应文件。 语法格式:lsusb [选项…

ftp限流java,FTP流量限制的方法

一般来说,下载都是通过FTP来实现的,这样简单的采用ACLs就可以实现的。不过这样存在一个问题,就是原来正常的网络访问也给禁止了,无法继续工作,另外,还有大量的DOWNLOAD不通过FTP,而是借助HTTP协…

argparser_Java命令行界面(第22部分):argparser

argparserJohn Lloyd的argparser是本系列的第二十二篇有关基于Java的命令行参数解析的文章中介绍的库。 该库的主页除了提供单个源代码示例外,还提供了指向基于Javadoc的API文档 ,JAR文件,ZIP文件和TAR文件的链接。 本帖子中使用的示例与本系…

判断 小程序 是否 滚动到页面底部 scrolltolower_微信小程序长列表性能优化——recycle-view

背景:第七次人口普查项目使用是微信小程序原生框架,组件是根据用户需求由项目组前端组组长封装完成的。采集小程序正式登记首页列表页面,根据腾讯老哥在sentry上的监控可以看出,列表页面前端性能比较差,主要表现在一些…

Linux 命令之 lspci -- 显示当前设备所有PCI总线信息

文章目录命令介绍常用选项命令示例(一)罗列 PCI 设备命令介绍 lspci命令用于显示当前主机的所有PCI总线信息,以及所有已连接的PCI设备信息。 现在主流设备如网卡储存等都采用PCI总线 常用选项 选项说明-n以数字方式显示PCI厂商和设备代码-…

arm java 性能怎么样,ARM v6上使用java的Number to String转换性能

我在ARM v6处理器上运行Java软件.这个程序的性质要求我将一些数字(int或float)转换为String.处理器运行速度为850Mhz. Java Runtime是OpenJDK Zero VM 1.7.0_21-b02.我并不期待这里有坚如磐石的表演,但我希望能比我在下面的代码片段中看到的更有效.long time1, time2;float[] s…

java rop_Java命令行界面(第23部分):Rop

java ropRop库在其主页上被描述为“用Java编写的轻量级命令行选项解析器”。 Rop的“简介”还指出:“ Rop的设计目的是最小化同时方便,并涵盖了大多数常见的命令行解析用例。” 这篇文章是本系列中有关解析Java命令行参数的系列文章中的第23部分&#xf…

python2打开文件_关于python:何时以二进制模式打开文件(b)?

我注意到在文档中他们总是用wb打开一个CSV文件。 为什么b? 我知道b代表二进制模式,但是你什么时候使用二进制模式(我猜想CSV文件不是二进制模式)。 如果相关我是从arcpy.da.SearchCursor()查询的结果写入CSV 编辑:根据这个答案注意到wb用于编…