上篇Excel动态生成模板,此篇将借用此模板进行Excel数据的批量导入。

说明:由于数据库中部分数据储存的是编码或者Id,因此,这里就需要用到上篇中的全局数据,判断是否有数据,有数据直接使用,没有数据,再去数据库查询,减少资源消耗;

 public String add(HttpServletRequest request, HttpServletResponse response) {
Map<String, Object> params = new HashMap<String, Object>();
List<MultipartFile> files = ((MultipartRequest) request).getFiles("file");
for (MultipartFile filePic : files) {
if(filePic.isEmpty() && "".equals(request.getParameter("PARENTID"))){
//null;
}else if (filePic.isEmpty()) {
boolean ok = getService().insert(params);
if (!ok) {
//false;
} else {
//true;
}
} else {
List<MultipartFile> filesList = ((MultipartRequest) request).getFiles("file");
for(MultipartFile file : filesList){
if (file.isEmpty())
continue;
//开始解析文件
try {
InputStream is = file.getInputStream();
Workbook wb = new HSSFWorkbook(is); //暂只能解析97-2003版本(.xls),缺少03以上版本(.xlsx)的jar包
//获取第一个sheet
Sheet sheet = wb.getSheetAt(0);
//获取最大行数
int rownum = sheet.getPhysicalNumberOfRows();
//获取第一行
Row row = sheet.getRow(0);
//获取最大列数
int colnum = row.getPhysicalNumberOfCells();
for(int i=1;i<rownum;i++){
Map<String , String > map = new LinkedHashMap<String, String>();
row = sheet.getRow(i);
if(row!=null){
for(int j=0;j<colnum;j++){
row.getCell(j).setCellType(HSSFCell.CELL_TYPE_STRING);//先强制转换成String类型
String cellData = row.getCell(j).getStringCellValue();//再读取
map.put(columns[j], cellData);
}
}else{
break;
}
list.add(map);
} } catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
//根据需要替换map中的K,V值,这里将商户类型,省名等替换成编码。
for(Map map :list){
if(faMerchantList.size()==0){
faMerchantList = service.findList("UU_BANK_MERCHANT.queryName", paramData);
}
if(merchantList.size()==0){
merchantList = bankMerchantTypeService.findList("UU_BANK_MERCHANTTYPE.query", paramData);
}
if(proviceLists.size()==0){
proviceLists = serviceOut.findList("UU_BANK_BANKOUTLET.selectProvices", paramData);
}
//商户类型
String entry = (String) map.get("TYPEID");
for(Object object:merchantList){
Map entryOb=(Map) object;
String Names=(String) entryOb.get("NAME");
if(null!=entry && !"".equals(entry) && entry.equals(Names)){
String Id=String.valueOf(entryOb.get("ID"));
map.put("TYPEID", Id);
break;
}
}
//商户父级id
String entryf = (String) map.get("PARENTID");
for(Object object:faMerchantList){
Map entryOb=(Map) object;
String Names=(String) entryOb.get("NAME");
if(null!=entryf && !"".equals(entryf) && entryf.equals(Names)){
String Id=String.valueOf(entryOb.get("ID"));
map.put("PARENTID", Id);
break;
}
}
//省
String provi = (String) map.get("PROVICE");
String provinceId="";
for(Object object:proviceLists){
Map entryOb=(Map) object;
String Names=(String) entryOb.get("NAME");
if(null!=provi && !"".equals(provi) && provi.equals(Names)){
provinceId=String.valueOf(entryOb.get("CITYCODE"));;
map.put("PROVICE", provinceId);
break;
}
}
//市
String city = (String) map.get("CITY");
if(!provinceId.isEmpty()){
String city_Code = provinceId.substring( 0, 2);
params.put("CITY_CODE", city_Code);
params.put("CITYCODE", provinceId);
}
params.put("NAME", city);
String cityId = serviceOut.load("UU_BANK_BANKOUTLET.selectCityId", params);
map.put("CITY", cityId);
//区
String county = (String) map.get("COUNTY");
if(!cityId.isEmpty()){
String city_Code = cityId.substring( 0, 4);
params.put("CITY_CODE", city_Code);
params.put("CITYCODE", cityId);
}
params.put("NAME", county);
String countyId = serviceOut.load("UU_BANK_BANKOUTLET.selectCountyId", params);
map.put("COUNTY", countyId);
}
for(Map map : list) {
boolean ok = service.insert(map);
if (!ok) {
//false;
} else {
//true;
}
}
} }
}

试想:在EXCEL里面选择省、市、区的名字,自动填入省市区的编码,或者在导入数据时在Excel中使用函数替换。-----渣渣的想法。

使用jar包poi3.7.

继上篇后的Excel批量数据导入的更多相关文章

  1. 将Excel中数据导入数据库(三)

    上篇文章将Excel中数据导入数据库时,将从Excel读入的数据均转换成了数据库相应字段的类型,其实这是没有必要的,因为对于数据库各种类型的插入,均可以字符串格式插入.比如表WQ_SWMSAR_A字段 ...

  2. ABAP-1-会计凭证批量数据导入本地ACCESS

    公司会计凭证导入ACCESS数据库,需要发送给审计,原先的方案是采用DEPHI开发的功能(调用函数获取会计凭证信息,然后INSERT到ACCESS数据表),运行速度非常慢,业务方要求对该功能进行优化, ...

  3. Excel表格数据导入MySQL数据库

    有时候项目需要将存在表格中的批量数据导入数据库,最近自己正好碰到了,总结一下: 1.将excel表格另存为.csv格式文件,excel本身的.xlsx格式导入时可能会报错,为了避免不必要的格式错误,直 ...

  4. Visual Basic 2012 借助DataGridView控件将Excel 2010数据导入到SQL server 2012

    (注:注释的颜色原本为绿色,在这里变为黑色,有点不便,但不会造成阅读影响.放入Visual Basic2012代码编辑器后会还原成绿色.) 摘  要:DataGridView控件作为数据传输的中介,只 ...

  5. 将Excel中数据导入数据库(二)

    在上篇文章中介绍到将Excel中数据导入到数据库中,但上篇文章例子只出现了nvachar类型,且数据量很小.今天碰到将Excel中数据导入数据库中的Excel有6419行,其中每行均有48个字段,有i ...

  6. ABAP-2-会计凭证批量数据导入本地ACCESS

    ABAP-1-会计凭证批量数据导入本地ACCESS 上一版本出现问题: A.若TXT数据条目超过800万(大概1.3G),则将TXT导入ACCESS过程不成功,ACCESS数据表为空.(Access单 ...

  7. 把Excel的数据导入到数据库

    将Excel作为数据源,将数据导入数据库,是SSIS的一个简单的应用,下图是示例Excel,数据列是code和name 第一部分,Excel中的数据类型是数值类型 1,使用SSDT创建一个packag ...

  8. Excel表数据导入Sql Server数据库中

    Excel表数据导入Sql Server数据库的方法很多,这里只是介绍了其中一种: 1.首先,我们要先在test数据库中新建一个my_test表,该表具有三个字段tid int类型, tname nv ...

  9. Excel的数据导入到PB的DW中

    Excel的数据导入到PB的DW中//==================================================================== // Event:cb_ ...

随机推荐

  1. java学习之路--String类方法的应用

    消除字符串两端的空格 1.判断字符串第一个位置是否为空格,如果是继续向下判断,直到不是空格位置,末尾也是这样,往前判断,直到不是空格为止. 2.当开始和末尾都不是空格时,获取字符串. public s ...

  2. vue中mint-ui的index-list 在手机端滑动问题

    官方的demo这里滑动很流畅,按着官网demo复制的在手机上必须手指拖着才能动,不能滑动: 加入 这段代码就行 -webkit-overflow-scrolling: touch; overflow- ...

  3. fastdfs-nginx-module-master的一些奇怪的特点

    测试环境和生产环境分别是两套fastdfs,但是网络没有隔离,今天发现一个奇怪的现象就是测试环境的文件,通过生产环境的入口,居然也可以访问到,我草了,奇怪了 研究发现功劳是fastdfs-nginx- ...

  4. java面试基础题------》Java 中List、Set、Map异同点

    借鉴地址:http://blog.csdn.net/speedme/article/details/22398395 几句喜欢的话,拷贝下来: 世间上本来没有集合,(只有数组参考C语言)但有人想要,所 ...

  5. POJ 3984 - 迷宫问题 - [BFS水题]

    题目链接:http://poj.org/problem?id=3984 Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, ...

  6. NIO学习资料

    五大IO模型 https://jiges.github.io/2018/02/07/%E4%BA%94%E5%A4%A7IO%E6%A8%A1%E5%9E%8B/ Getting started wi ...

  7. 20189203《Linux内核原理与分析》第一周作业

    实验一 Linux 系统简介 我在这一课中主要学习了Linux是什么,Linux的产生和发展历史,Linux发展中的重要人物以及Linux和Windows在是否收费.软件与支持.安全性等方面存在的一些 ...

  8. autoMapper的介绍

    .NET的DTO映射工具AutoMapper 分类: 多层架构 DTO .NET2012-08-11 10:27 2466人阅读 评论(0) 收藏 举报 原文:https://github.com/A ...

  9. Asianux 7.3安装Oracle 11.2.0.4单实例体验

    环境:Asianux 7.3 需求:安装Oracle 11.2.0.4 单实例 背景:系统使用默认的最小安装部署,Oracle安装额外需要的包统一使用yum安装. 查看当前系统相关信息: [root@ ...

  10. 《linux就该这么学》第四节课笔记,三章和四章开始!

    第三章 (根据课本和在线培训视频排版总结,借鉴请改动)         右键可打开终端练习             3.1:输入输出重定向 输入重定向:符号 "<" ,是一种 ...