上篇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. 剑指offer——python【第28题】数组 中出现次数超过一半的数字

    题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...

  2. layer loading层 的设置

    /* shadeClose 类型:Boolean 默认:true,是否点击遮罩时关闭层 */ var tishi = layer.open({ shadeClose: false ,type: 2 , ...

  3. 我也来----xia bi bi 一下----微信小程序

    工作刚到一阶段 就看了看微信小程序  自己做了个小dome 主要是为了让我女朋友能够学习做菜! 然而悲催的发现我根本没有App ID   不说快了  直接上图 个人感觉开发起来还是很简单的. 对着AP ...

  4. Python学习之旅(三十一)

    Python基础知识(30):图形界面(Ⅰ) Python支持多种图形界面的第三方库:Tk.wxWidgets.Qt.GTK等等 Tkinter可以满足基本的GUI程序的要求,此次以用Tkinter为 ...

  5. [转]在centos 6.4下安装opencv 2.3.1

    系统环境介绍: centos 6.4 1.安装依赖包 yum install cmake gcc gcc-c++ gtk+-devel gimp-devel gimp-devel-tools gimp ...

  6. IntelliJ IDEA 注册码激活

    IntelliJ IDEA 注册码激活 方法一:使用激活服务器激活方法 步骤 1.打开注册/激活窗口: 2.选择 License server: 3.填入上述其中一个网址(如:http://idea. ...

  7. ES6语法(3)—— 用promise()对象优雅的解决异步操作

    Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大. 所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果. ...

  8. [js]面向对象1

    数据赋值拷贝 1,值得赋值是独立的 num1=12; num1=num2 将存储值赋值一份存储. 2, var age=22; age2=age; age=24 console.log(age); a ...

  9. 69A

    #include <stdio.h> int main() { int n; int sum1=0, sum2=0, sum3=0; int x, y, z; scanf("%d ...

  10. phpstudy如何安装ssl证书

    网站上面部署ssl证书的站点越来越大,但有很多集成式的web服务器无法按照一般站点的配置来部署ssl证书,现在,卓趣科技就以集成式phpstudy为例(apache+mysql),为大家展示一下正确的 ...