poi之Excel上传
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上传的更多相关文章
- EXCEL上传POI
Java SpringMVC POI上传excel并读取文件内容 2017年11月27日 15:26:56 强人锁男. 阅读数:15329 用的SSM框架,所需要的jar包如图所示:,链接地址:j ...
- excel上传和下载
需要注意的地方: 1.js构造表单并提交 2.js中文传参encodeURI(encodeURI("中文")),action接收并转换value = URLDecoder.deco ...
- IT轮子系列(六)——Excel上传与解析,一套代码解决所有Excel业务上传,你Get到了吗
前言 在日常开发当中,excel的上传与解析是很常见的.根据业务不同,解析的数据模型也都不一样.不同的数据模型也就需要不同的校验逻辑,这往往需要写多套的代码进行字段的检验,如必填项,数据格式.为了避免 ...
- Excel上传并读取数据
最近一段时间,维护一个旧系统,其中有一个功能,是把Excel上传,并读取数据进行维护,然后转插入至SQL数据库中.下面Insus.NET使用asp.net 标准上传控件: <asp:FileUp ...
- 基于thinkphp5的Excel上传
涉及知识点: thinkphp5.0: excel上传: mysql建立新表(基本的create语句): mysql ignore(避免重复插入): 主要功能: 通过在视图中上传excel文件,在my ...
- 2019.06.05 ABAP EXCEL 操作类代码 OLE方式(模板下载,excel上传,内表下载)
一般使用标准的excel导入方法9999行,修改了标准的excel导入FM 整合出类:excel的 模板下载,excel上传,ALV内表下载功能. 在项目一开始可以SE24创建一个类来供整体开发使用, ...
- 【Javaweb】poi实现通过上传excel表格批量导入数据到数据库
1.导入poi相关jar包 对于只操作2003及以前版本的excel,只需要导入poi-XXX.jar ,如果还需要对2007及以后版本进行操作,则需要导入 poi-ooxml-XXX.jar poi ...
- F9 excel上传
1 在前台制定文件上传按钮 <div id="dataImport" class="mini-webuploader" pickerText=" ...
- 基于BootStrap的initupload()实现Excel上传和获取excel中的数据
简单说明:后边要做exl解析(还没做呢),所以先有一个excel的的上传以及获取excel中的数据,展示出来. 代码: //html代码 <div class="btn-group&q ...
随机推荐
- 对于异步编程Await和Async的理解
public class AsyncInSync { /// <summary> /// 同步代码里有异步代码 /// /// /// 结果 /// Main Thread Before ...
- leetcode-160周赛-5239-循环码排列
题目描述: 参考格雷编码: class Solution: def circularPermutation(self, n: int, start: int) -> List[int]: res ...
- C循环
C 循环 有的时候,可能需要多次执行同一块代码.一般情况下,语句是顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推. 编程语言提供了允许更为复杂的执行路径的多种控制结构. 循环语句允许 ...
- JSTL标签的用法详解
在JSP中写Java代码是一件很恶心的事情,代码量少的话还可以,要是多的话,就蛋疼了,整个页面都是<% %>所以EL表达式和JSTL就应运而生了,这里我们注重讲解一下JSTL标签的使用: ...
- AcWing 202. 最幸运的数字 (欧拉定理)打卡
8是中国的幸运数字,如果一个数字的每一位都由8构成则该数字被称作是幸运数字. 现在给定一个正整数L,请问至少多少个8连在一起组成的正整数(即最小幸运数字)是L的倍数. 输入格式 输入包含多组测试用例. ...
- [bzoj2729][HNOI2012]排队 题解 (排列组合 高精)
Description 某中学有 n 名男同学,m 名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人都是不 ...
- 用 Windows Live Writer 和 SyntaxHighlighter 插件写高亮代码
博客园内置支持SyntaxHighlighter代码着色,代码着色语法:<pre class='brush:编程语言'>代码</pre>. 需要注意的是:如何你使用Syntax ...
- Hdu-4757 Tree(可持久化字典树+lca)
题目链接:点这 我的github地址:点这 Problem Description Zero and One are good friends who always have fun wi ...
- MFC的回调函数
MFC中应该有两类回调函数:一类是源自C的传统回调函数,此类回调函数若非定义为全局函数,而定义在类中的话,要添加static约束,常见的有EnumXXX():一类是消息响应函数,通过成员函数指针实 ...
- 批处理禁止指定的IE的加载项
步骤: 1.查找插件对应的 CLSID 获取 HKCU\Software\Microsoft\Windows\CurrentVersion\Ext\Stats 下的 CLSID, 然后在 HKCR\C ...