继上篇后的Excel批量数据导入
上篇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批量数据导入的更多相关文章
- 将Excel中数据导入数据库(三)
上篇文章将Excel中数据导入数据库时,将从Excel读入的数据均转换成了数据库相应字段的类型,其实这是没有必要的,因为对于数据库各种类型的插入,均可以字符串格式插入.比如表WQ_SWMSAR_A字段 ...
- ABAP-1-会计凭证批量数据导入本地ACCESS
公司会计凭证导入ACCESS数据库,需要发送给审计,原先的方案是采用DEPHI开发的功能(调用函数获取会计凭证信息,然后INSERT到ACCESS数据表),运行速度非常慢,业务方要求对该功能进行优化, ...
- Excel表格数据导入MySQL数据库
有时候项目需要将存在表格中的批量数据导入数据库,最近自己正好碰到了,总结一下: 1.将excel表格另存为.csv格式文件,excel本身的.xlsx格式导入时可能会报错,为了避免不必要的格式错误,直 ...
- Visual Basic 2012 借助DataGridView控件将Excel 2010数据导入到SQL server 2012
(注:注释的颜色原本为绿色,在这里变为黑色,有点不便,但不会造成阅读影响.放入Visual Basic2012代码编辑器后会还原成绿色.) 摘 要:DataGridView控件作为数据传输的中介,只 ...
- 将Excel中数据导入数据库(二)
在上篇文章中介绍到将Excel中数据导入到数据库中,但上篇文章例子只出现了nvachar类型,且数据量很小.今天碰到将Excel中数据导入数据库中的Excel有6419行,其中每行均有48个字段,有i ...
- ABAP-2-会计凭证批量数据导入本地ACCESS
ABAP-1-会计凭证批量数据导入本地ACCESS 上一版本出现问题: A.若TXT数据条目超过800万(大概1.3G),则将TXT导入ACCESS过程不成功,ACCESS数据表为空.(Access单 ...
- 把Excel的数据导入到数据库
将Excel作为数据源,将数据导入数据库,是SSIS的一个简单的应用,下图是示例Excel,数据列是code和name 第一部分,Excel中的数据类型是数值类型 1,使用SSDT创建一个packag ...
- Excel表数据导入Sql Server数据库中
Excel表数据导入Sql Server数据库的方法很多,这里只是介绍了其中一种: 1.首先,我们要先在test数据库中新建一个my_test表,该表具有三个字段tid int类型, tname nv ...
- Excel的数据导入到PB的DW中
Excel的数据导入到PB的DW中//==================================================================== // Event:cb_ ...
随机推荐
- 线程的简述Thread
为什么有进程? 原来操作系统只能处理一件任务,有了进程就可以让操作系统处理多个任务.因为进程与进程之间是完全隔离的,涉及到了内存空间.数据的切换,所以就有了进程的概念. 已经有了进程,为什么还要线程? ...
- css 使元素居中
css使元素水平居中 1.对于行内元素的水平居中 给父元素设置text-align:center <div style="text-align:center;">居中显 ...
- SQL特殊字符转义
原文链接: SQL特殊字符转义 应 该说,您即使没有处理 HTML 或 JavaScript 的特殊字符,也不会带来灾难性的后果,但是如果不在动态构造 SQL 语句时对变量中特殊字符进行处理,将可能导 ...
- MySQL数据库(查询语句)
用户 角色 权限 select * from students1:查询这个表里的数据 select ssex from students1:在这个表里面查询ssex(性别) select dist ...
- Oracle课程档案,第十五天
restore:恢复数据文件 recover:写日志 1.redo(roll forward)重做 (前进) 2.undo(roll back) 撤销 (回滚) cp -r:删除一个目录 archiv ...
- Python学习之旅(七)
Python基础知识(6):基本数据类型之列表 在Python中,最基本的数据结构是序列.序列中的每个元素被分配一个序号——即元素的位置,也称为索引.第一个索引从0开始,如果要从右边开始,序列中的最后 ...
- [No0000C6]Visual Studio 2017 函数头显示引用个数
Visual Studio 2017 函数头显示引用个数
- 【摘】Fiddler工具使用介绍
摘自:https://www.cnblogs.com/miantest/p/7289694.html Fiddler基础知识 Fiddler是强大的抓包工具,它的原理是以web代理服务器的形式进行工作 ...
- 列表 & 元组& join & range
一:列表(增删改查,列表的嵌套,列表的循环) 1)增加 append (在列表的尾部增加) insert (插入) insert(插入的位置,插入的内容) extend ...
- Linux之SSH免密登录
实验方法: 开启两台虚拟机A和B,IP地址分别为192.168.222.12.192.168.222.10 在虚拟机A下做如下操作,生成公钥和密钥: [root@localhost ~]# ssh-k ...