poi之Excel上传

@RequestMapping(value = "/import", method = RequestMethod.POST)
public String importFile(MultipartFile file,RedirectAttributes redirectAttributes) {
log.debug("批量导入终端数据");
/***
* 1,解析Excel 得到List<TerminalSDMTExcel>
* 2,遍历,并处理list{
* 1,判断TerminalSDMTExcel是否为空
* 2,判断id是否为空
* 3,检验Excel中的数据是否合法
* 4,TerminalSDMTExcel转TerminalSDMT
* 5,入库{
* 1,判断是否存在:存在则跳过
* 2,入库
* }
* }
* 3、提示批量导入商户结果
*/
try {
int successNum = 0;
int failureNum = 0;
StringBuilder failureMsg = new StringBuilder();
ImportExcel ei = new ImportExcel(file, 1, 0);
List<TerminalSDMTExcel> list = ei.getDataList(TerminalSDMTExcel.class);
TerminalSDMT Terminal = null;
for (int i=0; i < list.size(); i++) {
TerminalSDMTExcel entity = list.get(i);
try {
//是否为空,如果没有,直接跳过
if (valiBoolean(entity)){
//判断entity中各字段是否合法
Map<String,Object> maps = checkMerchantExcel(entity);
boolean flags = (Boolean) maps.get("flag");
StringBuilder checkcontext = (StringBuilder) maps.get("content");
log.debug("判断输入值是否合法");
//判断输入值是否合法
if(flags){
//合法
//转换
Terminal = excelSwitchEntity(entity);
//插入
Map<String,Object> map = TerminalSDMTService.save(Terminal);
String flag = (String) map.get(SysConst.RESULT);
/**
* =0,成功
* =-1,失败
*/
if("-1".equals(flag)){
//商户已存在
failureMsg.append("\n终端编号" + entity.getTermCode()+ " 已存在; ");
failureNum++;
}if("0".equals(flag)){
//成功
successNum++;
}
}else{
//不合法
failureMsg.append("\n终端编号:" + entity.getTermCode()+ ",失败原因:"+checkcontext.toString());
failureNum++;
}
}else{
if(Strings.isNullOrEmpty(entity.getMerchantId()) || Strings.isNullOrEmpty(entity.getTermCode())){
failureMsg.append("\n失败原因:第"+ (i+3)+"行,商户、终端编号为必填项");
failureNum++;
}else{
failureMsg.append("\n终端编号:" + entity.getTermCode()+ ",失败原因:所有项均为必填项 ");
failureNum++;
}
}
}
catch (Exception ex) {
failureMsg.append("\n终端编号 " + entity.getTermCode() + " 导入失败:"+ ex.getMessage());
}
}
if (failureNum > 0) {
failureMsg.insert(0, ",失败 " + failureNum + " 条终端信息,导入信息如下:");
}
addMessage(redirectAttributes, "已成功导入 " + successNum + " 条终端信息"+ failureMsg);
} catch (Exception e) {
addMessage(redirectAttributes, "导入终端信息失败!失败信息:" + e.getMessage());
}
return "redirect:";
}

  

注意实体映射规则

poi之Excel上传的更多相关文章

  1. EXCEL上传POI

    Java SpringMVC POI上传excel并读取文件内容 2017年11月27日 15:26:56 强人锁男. 阅读数:15329   用的SSM框架,所需要的jar包如图所示:,链接地址:j ...

  2. excel上传和下载

    需要注意的地方: 1.js构造表单并提交 2.js中文传参encodeURI(encodeURI("中文")),action接收并转换value = URLDecoder.deco ...

  3. IT轮子系列(六)——Excel上传与解析,一套代码解决所有Excel业务上传,你Get到了吗

    前言 在日常开发当中,excel的上传与解析是很常见的.根据业务不同,解析的数据模型也都不一样.不同的数据模型也就需要不同的校验逻辑,这往往需要写多套的代码进行字段的检验,如必填项,数据格式.为了避免 ...

  4. Excel上传并读取数据

    最近一段时间,维护一个旧系统,其中有一个功能,是把Excel上传,并读取数据进行维护,然后转插入至SQL数据库中.下面Insus.NET使用asp.net 标准上传控件: <asp:FileUp ...

  5. 基于thinkphp5的Excel上传

    涉及知识点: thinkphp5.0: excel上传: mysql建立新表(基本的create语句): mysql ignore(避免重复插入): 主要功能: 通过在视图中上传excel文件,在my ...

  6. 2019.06.05 ABAP EXCEL 操作类代码 OLE方式(模板下载,excel上传,内表下载)

    一般使用标准的excel导入方法9999行,修改了标准的excel导入FM 整合出类:excel的 模板下载,excel上传,ALV内表下载功能. 在项目一开始可以SE24创建一个类来供整体开发使用, ...

  7. 【Javaweb】poi实现通过上传excel表格批量导入数据到数据库

    1.导入poi相关jar包 对于只操作2003及以前版本的excel,只需要导入poi-XXX.jar ,如果还需要对2007及以后版本进行操作,则需要导入 poi-ooxml-XXX.jar poi ...

  8. F9 excel上传

    1 在前台制定文件上传按钮 <div id="dataImport" class="mini-webuploader" pickerText=" ...

  9. 基于BootStrap的initupload()实现Excel上传和获取excel中的数据

    简单说明:后边要做exl解析(还没做呢),所以先有一个excel的的上传以及获取excel中的数据,展示出来. 代码: //html代码 <div class="btn-group&q ...

随机推荐

  1. ubuntu颜色配置

    对于刚接触ubuntu的同学们,打开终端(ctrl+alt+T),会发现里面都是一个颜色,不管是用户名.主机名还是命令都是白色,当然,用 ls 列出文件的时候是会多一种颜色的.即使这样,对开发人员来说 ...

  2. vue全家桶(vue2.x+vue-router+axios+webpack)项目搭建

    参考博客文章 博主FungLeo的Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版 注:原博主写的非常详细 本文章为根据原博主教程总结的自己的搭建流程 一.安装n ...

  3. Ubuntu系统管理systemd

    systemctl命令 systemctl list-units - 列出所有jobs/serviceList all units (where unit is the term for a job/ ...

  4. C中的lvalue和rvalue

    该贴子第一条回答虽然浅尝辄止,但还是很有参考价值. https://www.quora.com/What-is-lvalue-and-rvalue-in-C IBM一个简单的说法是: "-通 ...

  5. input在输入中文时所触发的事件(防止输入中文时重复执行)

    一般在监听文本框输入时监听文本内容改变事件,可以使用oninput和onchange事件,两者区别在于oninput在文本输入状态可以一直监听变化,onchange在文本框失去焦点时才会触发,所以要想 ...

  6. 【Linux】windows下编写的脚本文件,放到Linux中无法识别格式

    注意:我启动的时候遇到脚本错误 » sh startup.sh -m standalone tanghuang@bogon : command not found : command not foun ...

  7. [NOIP模拟测试9]题(Problem) 题解 (组合数全家桶+dp)

    达哥送分给我我都不要,感觉自己挺牛批. $type=0:$ 跟visit那题类似,枚举横向移动的步数直接推公式: $ans=\sum C_n^i \times C_i^{\frac{i}{2}} \t ...

  8. [7.22NOIP模拟测试7]方程的解 题解(扩展欧几里得)

    Orz 送分比较慷慨的一道题,疯狂特判能拿不少分. 对于$a>0,b>0$的情况: 用exgcd求出方程通解,然后通过操作得到最小正整数解和最大正整数解 他们以及他们之间的解满足等差数列性 ...

  9. wmic命令用法小例

    wmic就是wmic.exe,位于windows目录底下,是一个命令行程序.WMIC可以以两种模式执行:交互模式(Interactive mode)和非交互模式(Non-Interactive mod ...

  10. (7)centos7 用户管理

    1.创建用户 useradd meng 如果创建用户时没有指定属于哪个组,则默认会创建一个名字与用户相同的组并归属于此组 对应的home目录下回创建一个meng的文件夹 2.设置密码 passwd m ...