上篇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. oracle如何通过cmd导出某个用户下的所有表

    1:如果要导入的用户下有空表,需要执行下面语句 select 'alter table '||table_name||' allocate extent;' from user_tables wher ...

  2. python基础类型—元祖

    元组  被称为只读列表,即数据可以被查询,但不能被修改,所以,字符串的切片操作同样适用于元组. 例:(1,2,3)("a","b","c") ...

  3. hdu 1241(DFS/BFS)

    Oil Deposits Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tota ...

  4. 23、svn与打飞机

    svn与git 打飞机 css *{margin:0; padding:0;} html,body{width:100%; height:100%; overflow: hidden;} .main{ ...

  5. 25个常用PowerShell命令总结

    尽管Windows PowerShell已经出现一段时间了,习惯命令行的管理员可能对了解PowerShell功能的基础很感兴趣. 下面我们看看能由Windows PowerShell完成的最常见的25 ...

  6. MAVEN_day01 下载与安装及环境变量的配置

    一.MAVEN简介 MAVEN是apache组织下的一个开源项目,是使用纯java编写的,之用于管理java工程. 二.MAVEN下载与安装 下载地址:http://maven.apache.org/ ...

  7. [js]作用域链查找规则获取值和设置值

    作用域链查找规则获取值和设置值 <script> /** 1.作用域链查找规则 私有作用域出现的一个变量不是私有的,则往上一级作用域查找,上级作用域没有则继续向上级查找,一直找到windo ...

  8. 41A

    #include <stdio.h> #include <string.h> #define MAXSIZE 105 int main() { char Berlandish[ ...

  9. DAX/PowerBI系列 - 累计总计(Cumulative Total)

    DAX/PowerBI系列 - 累计总计(Cumulative Total) 2017/07/23 更新:B列公式(见最后) 难度: ★★☆☆☆(2星) 适用: ★★☆☆☆(2星) 概况: 这个模式普 ...

  10. python_json序列化和反序列化

    序列化 import json dic = {'} print(json.dumps(dic)) 反序列化;json.loads() dic = {'} print(json.dumps(dic)) ...