•    制定标准

  导入总是与导出相辅相成的,无规矩不成方圆。所谓的标准都是大家一同来维护和遵守的,那么首先就是制定一个模板。

   这样可以减少验证的工作量。

   例如时间的规范【yyyy-MM-dd】,获取单元格的时间值用下面的方法

   java.util.Date date= cell.getDateCellValue();

    但是如果用户不合法输入,那么将会报IllegalStateException异常,此时我们可以进行错误的捕获和处理

  导入的前提的数据是合法的,因此验证数据是非常必要的,数据的格式就要大家要遵守了。但是严谨而已,还是必须考虑用户的非法操作。

  •     模板的标识

      每个模板都有对应的标识,不可能随便什么数据都可以往数据库表对象中塞的,因此要设计一个标识符用于区分模板。

  标识符必须是唯一的,可以识别的。通常都是指定导入对象的主键为标识符。

  • 模板校验

  如果模板限定了可以编辑区域,那么只是需要验证标识符即可。但是往往我们需要复制大量的数据,因此不可能设置保护模式,这个时候需要对模板进行格式校验。

   校验包括模版格式校验、数据合法性校验,数据范围校验等等。

  如果各种校验都用java程序来判断,那么数据量很大的时候,处理和执行速度会非常的慢。经过几天研究,发现善于利用oracle的语句可以使效率提高几十倍,前提

  是数据都放在数据库中。

  因此,除了简单的检验之后,我们可以将excel的数据放入到数据库创建的临时表或者日志表中,进行数据的校验。

   创建的数据临时表必须满足两个条件,第一是含有模板标识符,第二是有一列指标用于存与excel对应的行数。

   这样方便返回错误详细信息,告诉用户哪行哪列数据出现问题。

   下面是几种简单的校验,非常实用:

  @ 检验excel的数据是否重复(数据重复的标准是某几列的值是否相等,即数据唯一标识)

  我们不需要循环excel一一对比,我们完全可以使用oracle函数实现数据重复检查

   select distinct substr(数据唯一标识列数据) as rn from 数据临时表 a

   where rowid !=(select max(rowid) from 数据临时表 b where 数据唯一标识列数据相等

  得到的数据是去除重复的数据,只要小于总条数(excel的行数lastRow),那么就可以知道重复的数据。

  @ 检验导入的数据是否已经存在

     select columns from 数据正式表 INTERSECT (select columns from 数据临时表 where ..);

   只要rs.next(),那么证明存在数据,并且可以获取到重复的数据。

POI实现excel各种验证和导入的思路总结的更多相关文章

  1. Java开发小技巧(六):使用Apache POI读取Excel

    前言 在数据仓库中,ETL最基础的步骤就是从数据源抽取所需的数据,这里所说的数据源并非仅仅是指数据库,还包括excel.csv.xml等各种类型的数据接口文件,而这些文件中的数据不一定是结构化存储的, ...

  2. POI读取Excel数据保存到数据库,并反馈给用户处理信息(导入带模板的数据)

    今天遇到这么一个需求,将课程信息以Excel的形式导入数据库,并且课程编号再数据库中不能重复,也就是我们需要先读取Excel提取信息之后保存到数据库,并将处理的信息反馈给用户.于是想到了POI读取文件 ...

  3. POI实现excel的数据验证

    目录 前言 难点1:合并单元格 代码实现策略: step 1: 合并单元格 step 2: 给单元格赋值 难点2:数据验证-下拉框 代码实现策略: step 1:设置需要进行数据验证的单元格范围和可供 ...

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

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

  5. SSM中使用POI实现excel的导入导出

    环境:导入POI对应的包 环境: Spring+SpringMVC+Mybatis POI对应的包 <dependency> <groupId>org.apache.poi&l ...

  6. 【原创】POI操作Excel导入导出工具类ExcelUtil

    关于本类线程安全性的解释: 多数工具方法不涉及共享变量问题,至于添加合并单元格方法addMergeArea,使用ThreadLocal变量存储合并数据,ThreadLocal内部借用Thread.Th ...

  7. poi实现excel的导入导出功能

    Java使用poi实现excel的导入导出功能: 工具类ExcelUtil,用于解析和初始化excel的数据:代码如下 package com.raycloud.kmmp.item.service.u ...

  8. java使用POI操作excel文件,实现批量导出,和导入

    一.POI的定义 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作Exc ...

  9. SpringBoot集成文件 - 集成POI之Excel导入导出

    Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程序对Microsoft Office格式档案读和写的功能.本文主要介绍通过Spr ...

随机推荐

  1. Angular4 组件通讯方法大全

    组件通讯,意在不同的指令和组件之间共享信息.如何在两个多个组件之间共享信息呢. 最近在项目上,组件跟组件之间可能是父子关系,兄弟关系,爷孙关系都有.....我也找找了很多关于组件之间通讯的方法,不同的 ...

  2. 【JAVASCRIPT】React入门学习-文本渲染

    摘要 react 学习包括几个部分: 文本渲染 JSX 语法 组件化思想 数据流 文本渲染 1. 纯文本渲染 <!DOCTYPE html> <html> <head&g ...

  3. Android 性能测试——Memory Monitor 工具

    Android 性能测试--Memory Monitor 工具 Memory Monitor能做什么? 实时查看App的内存分配情况 快速判断App是否由于GC操作造成卡顿 快速判断App的Crash ...

  4. nodeJS实现路由功能

    前面的话 本文将使用NodeJS实现较复杂应用的路由功能 结构 项目结构如下 代码如下 功能 [router.js] // 加载所需模块 var http = require('http'); var ...

  5. MongoDB入门命令

    查看所有数据库 > show dbs admin (empty) local 0.078GB > admin和管理相关, admin和local数据库不要轻易动 选择库 > use ...

  6. 带着SMART原则重新出发

    很久以来,对分布式系统都比较感兴趣,但工作中却接触不到,“虽不能至,心向往之”,于是打算自己学.分布式系统领域概念很多,错综复杂,一些理论也比较难以理解,要想学习的话还是得下一番功夫.于是在来两个月前 ...

  7. Koa框架教程,Koa框架开发指南,Koa框架中文使用手册,Koa框架中文文档

    我的博客:CODE大全:www.codedq.net:业余草:www.xttblog.com:爱分享:www.ndislwf.com或ifxvn.com. Koa -- 基于 Node.js 平台的下 ...

  8. [Poi2010]Monotonicity 2 线段树

    这道题考试的时候先打了个dfs暴力.又打了个O(n²)的动规.然后竟然心血来潮拍了一下..明明知道过不去的...然后水了50分(20个测试点这么多啊啊啊啊). 因为它已经提前给你如果长度为i时下一位的 ...

  9. [您有新的未分配科技点]无旋treap:从好奇到入门(例题:bzoj3224 普通平衡树)

    今天我们来学习一种新的数据结构:无旋treap.它和splay一样支持区间操作,和treap一样简单易懂,同时还支持可持久化. 无旋treap的节点定义和treap一样,都要同时满足树性质和堆性质,我 ...

  10. Linux误删C基本运行库libc.so.6处理方法

    1. libc.so.6介绍/usr/lib/libc.so.6是glibc的软链接,不同的平台可能路径会不一样.使用命令查看会看到: [root@farmer:~]$ls -l /lib/libc. ...