前言

Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。

实际开发中,用POI来读写excel文档的比较多。所以,这里记录下用POI读取excel文档的一些难点做下记录。

难点1:合并单元格

在实际开发中,有时会遇到如图示例,需要按照如图所示进行导出excel文件。这就涉及到了合并单元格和给单元格赋值的问题。

代码实现策略:

step 1: 合并单元格

eventSheet.addMergedRegion(new CellRangeAddress(lineNum, fields.size() + lineNum - 1, 1, 1));

step 2: 给单元格赋值

按照正常给单元格赋值即可,只是在合并的单元格第一行赋值就行,不用重复赋值;

cell = row.createCell((short) 1);
cell.setCellValue(eventVO.getEventId());
cell.setCellStyle(align_center_style);

难点2:数据验证-下拉框

在导出excel文件时,需要添加数据验证的下拉框。如图:

代码实现策略:

step 1:设置需要进行数据验证的单元格范围和可供选择的值

	/**
* 设置 excel数据验证
*
* @param firstRow
* @param firstCol
* @param endRow
* @param endCol
* @param strList 可供选择的值
* @return
* @since @ 2018年3月14日
*/
XSSFDataValidation getDataValidationList(XSSFSheet sheet, short firstRow, short firstCol, short endRow, short endCol, List<String> strList) {
String[] datas = strList.toArray(new String[0]);
XSSFDataValidationHelper dvHelper = new XSSFDataValidationHelper(sheet);
XSSFDataValidationConstraint dvConstraint = (XSSFDataValidationConstraint) dvHelper
.createExplicitListConstraint(datas);
CellRangeAddressList addressList = new CellRangeAddressList(firstRow, endRow, firstCol, endCol);
XSSFDataValidation validation = (XSSFDataValidation) dvHelper.createValidation(dvConstraint, addressList);
return validation;
}

step 2:给当前sheet添加数据验证

sheet.addValidationData(line2ValidationList);

难点3:数据验证-某列保证唯一性

有时候在excel文件的某列添加数据时,需要保证某列的数据唯一。这就需要使用excel的数据验证-自定义,设置为:=COUNTIF($B$2:B2,B2)=1(说明:从B2开始,B列的数据保证唯一,若是重复会给出提示,不能保存)

代码实现策略:

step 1:设置需要进行数据验证的单元格范围

    public static XSSFDataValidation getDataValidationCustomFormula(XSSFSheet sheet, short firstRow, short firstCol, short endRow, short endCol, String formula) {
XSSFDataValidationHelper dvHelper = new XSSFDataValidationHelper(sheet);
XSSFDataValidationConstraint dvConstraint = (XSSFDataValidationConstraint) dvHelper
.createCustomConstraint(formula);
CellRangeAddressList addressList = new CellRangeAddressList(firstRow, endRow, firstCol, endCol);
XSSFDataValidation validation = (XSSFDataValidation) dvHelper.createValidation(dvConstraint, addressList); validation.createErrorBox("Error", "Repeating Date.");
validation.setShowErrorBox(true);
validation.setEmptyCellAllowed(true);
validation.setSuppressDropDownArrow(true);
validation.setShowPromptBox(true);
validation.setErrorStyle(DataValidation.ErrorStyle.STOP); return validation;
}

step 2:给当前sheet添加数据验证

        XSSFDataValidation dataValidation = XX.getDataValidationCustomFormula((XSSFSheet) eventSheet, (short) 1, (short) 1, (short) (lineNum + 5), (short) 1, "=COUNTIF($B$2:B2,B2)=1");
if (dataValidation != null) {
eventSheet.addValidationData(dataValidation);
}

POI实现excel的数据验证的更多相关文章

  1. 项目一:第四天 1、快递员的条件分页查询-noSession,条件查询 2、快递员删除(逻辑删除) 3、基于Apache POI实现批量导入区域数据 a)Jquery OCUpload上传文件插件使用 b)Apache POI读取excel文件数据

    1. 快递员的条件分页查询-noSession,条件查询 2. 快递员删除(逻辑删除) 3. 基于Apache POI实现批量导入区域数据 a) Jquery OCUpload上传文件插件使用 b) ...

  2. 使用poi读取Excel文件数据

    package com.haiyisoft.iecp.util; import java.io.File;import java.io.FileInputStream;import java.io.F ...

  3. java中使用poi导出excel表格数据并且可以手动修改导出路径

    在我们开发项目中,很多时候会提出这样的需求:将前端的某某数据以excel表格导出,今天就给大家写一个简单的模板. 这里我们选择使用poi导出excel: 第一步:导入需要的jar包到 lib 文件夹下

  4. 使用NPOI或POI 导出Excel大数据(百万级以上),导致内存溢出的解决方案(NPOI,POI)

    使用工具:POI(JAVA),NPOI(.Net) 致谢博主 Crazy_Jeff 提供的思路 一.问题描述: 导出任务数据量近100W甚至更多,导出的项目就会内存溢出,挂掉. 二.原因分析: 1.每 ...

  5. Java POI 实现Excel相同数据同一颜色,不同数据颜色交替显示

    目录 1.效果图 2.具体代码实现 excel 读取工具类 excel写入和测试类 1.效果图 2.具体代码实现 excel 读取工具类 package utils; import java.io.F ...

  6. POI 生成excel(大数据量) SXSSF

    使用POI 的SXSSF (Streaming Usermodel API)生成较大的excel,同时开启压缩 import junit.framework.Assert; import org.ap ...

  7. poi读取Excel内容数据

    public static void main(String[] args) { try{ //获取文件输入流 FileInputStream fileIn = new FileInputStream ...

  8. poi导入excel表格数据到数据库的时候,对出生日期的校验

    出生日期格式为8位数字的字符串 如:yyyyMMdd 规则:yyyy大于1900并小于当前时间,月.日 按日期规则校验 //解决读过来的字符串显示为科学计数法问题 BigDecimal bd = ne ...

  9. excel自定义数据验证

    1. 判断必须为5位或者9位的数字 2. 自定义限制级别和提示消息

随机推荐

  1. 构建高可靠hadoop集群之4-权限指引

    此文翻译自http://hadoop.apache.org/docs/r2.8.0/hadoop-project-dist/hadoop-hdfs/HdfsPermissionsGuide.html ...

  2. python实现简单决策树(信息增益)——基于周志华的西瓜书数据

    数据集如下: 色泽 根蒂 敲声 纹理 脐部 触感 好瓜 青绿 蜷缩 浊响 清晰 凹陷 硬滑 是 乌黑 蜷缩 沉闷 清晰 凹陷 硬滑 是 乌黑 蜷缩 浊响 清晰 凹陷 硬滑 是 青绿 蜷缩 沉闷 清晰 ...

  3. 02 shell编程之条件语句

    Shell编程之条件语句 学习目标: 掌握shell脚本条件测试 掌握if语句编程 目录结构: 条件测试 条件测试概述 l  对特定的条件进行判断,以决定如何执行操作 l  测试的方法 方法1:tes ...

  4. vue 路由对象(常用的)

    路由对象 在使用了 vue-router 的应用中,路由对象会被注入每个组件中,赋值为 this.$route ,并且当路由切换时,路由对象会被更新. 路由对象暴露了以下属性: $route.path ...

  5. Hadoop(7)-HDFS客户端的API操作

    1 客户端环境准备 根据自己电脑的操作系统拷贝对应的编译后的hadoop jar包到非中文路径 配置HADOOP_HOME的环境变量,并且在path中配置hadoop的bin 重启电脑 2. Hdfs ...

  6. vm 中 centOS 7 固定ip设置

    虚拟机中,centOS通过NAT连接,设置固定IP上网. 本地主机 VMware Network Adapter VMnet8  状态信息: 描述: VMware Virtual Ethernet A ...

  7. pig分组统计例子

    1.选取数据样本 在pig安装目录下有一个文件tutorial/data/excite-small.log,其中的数据分为3列,中间用制表符分隔,第一列为用户ID,第二列为Unix时间戳,第三列为查询 ...

  8. python3 练习题100例 (二十三)与7相关的数

    与7相关的数:如果一个正整数,它能被7整除或者它的十进制表示法中某个位数上的数字为7,则称之为与7相关的数.(10分) 题目内容: 现在我们给定一个正整数n(n<1000),求所有小于等于n的与 ...

  9. atlas+mysql部署mysql读写分离

    1.atlas 简介 Atlas是由 Qihoo 360公司Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目.它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基 ...

  10. 笨方法学python之import sys与from sys import argv的区别

    这是在网上看到的一个大神的解答: sys is a module that contains “system functionality”. sys.argv is a list containing ...