上篇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. 9 ArcGIS Server 性能优化

    1.系统性能影响因子 地图.服务类型.数据源.客户端技术.CPU.数据结构.网络.内存.存储.部署.架构.服务接口.SDE等. 2.ArcGIS Server性能优化 数据结构与数据源:数据结构(矢量 ...

  2. ArcGIS Runtime For Android setViewpointCenterAsync(Point center, double scale)效果奇葩,不响应

    最近做一个东西,用的是ArcGIS Runtime Sdk for Android 100.1.0,由于刚用这个版本,理解不够,出现了一个奇葩问题 在对FeatureLayer进行Query之后,想要 ...

  3. loadrunner笔记(一):下载、安装loadrunner和负载压力测试概念说明

    (一)   下载和安装 下载:(没账号的话得先注册一个账号) https://software.microfocus.com/en-us/products/loadrunner-load-testin ...

  4. 剑指offer——python【第54题】字符流中第一个不重复的字符

    题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g".当从该字符流中读出 ...

  5. itoa()、atoi()、任意进制转换

    头文件:<stdlib.h> itoa --功能:将任意类型的数字转换为字符串.在<stdlib.h>中与之有相反功能的函数是atoi. atoi----功 能: 将字符串转换 ...

  6. [No0000198]swagger api一键导入postman

    在用postman进行接口测试时,对于参数较多的接口时第一次添加接口参数是比较繁琐的,可利用swagger一键导入api接口,事例如下: 1.获取swagger地址 2.打开postman,点击imp ...

  7. [No0000186]治愈系课程教材 第一课

    一部分:时态 时态有时间和特点组成 时间:现在.过去.将来 特点:一般.完成.进行.完成进行 所以时态总共有12种(加上过去将来的时间又多出4种时态,总共16种) 一般现在时 一般过去时 一般将来时 ...

  8. Kerberos安全体系详解---Kerberos的简单实现

    1.  Kerberos简介 1.1. 功能 一个安全认证协议 用tickets验证 避免本地保存密码和在互联网上传输密码 包含一个可信任的第三方 使用对称加密 客户端与服务器(非KDC)之间能够相互 ...

  9. RGBA与Opacity

    rgba(r,g,b,a) 都与透明度有关,rgba不会影响文字,opacity则会.

  10. arcmap发布服务报错:“Faild to publish service”

    发布gp服务时,Analyze没有重大错误,但是发布结束时提示"Faild to publish service".让人很懵逼: 解决方法: 打开arcgis server man ...