版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_39220472/article/details/81952921
编译工具:eclipse
项目:maven+ssm
springmvc使用easypoi导出导入Excel表(1):导出Excel表
在pom.xml引入easypoi的依赖包:
<!--easypoi -->
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-base</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-web</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-annotation</artifactId>
<version>3.0.3</version>
</dependency>
导入Excel表:
前端页面:
<form method="post" enctype="multipart/form-data" action="insertExcel" class="pageForm required-validate" onsubmit="return iframeCallback(this, dialogAjaxDone);">
<div class="pageFormContent" layoutH="56">
<p>
<label>上传模版:</label> <input name="file" type="file" class="valid">
</p>
</div>
<div class="formBar">
<ul>
<li><div class="buttonActive">
<div class="buttonContent">
<button type="submit">保存</button>
</div>
</div></li>
<li>
<div class="button">
<div class="buttonContent">
<button type="button" class="close">取消</button>
</div>
</div>
</li>
</ul>
</div>
</form>
controller层:
// 上传excel文件
@RequestMapping("/insertExcel")
public Object insertExcel(HttpServletRequest req, MultipartFile file) {
System.out.println("导入开始-->");
System.out.println("file-->" + file);
// 构建解析excel的easypoi参数
ImportParams params = new ImportParams();
params.setTitleRows(1); // 标题行
params.setHeadRows(1); // 别名行
try {
// 读取数据
List<SysWorker> list = ExcelImportUtil.importExcel(file.getInputStream(), SysWorker.class, params);
// 设置对象的默认值
for (SysWorker car : list) {
System.out.println(car.toString());
}
// 批量导入
int result = sysWorkerService.batchInsert(list);
if (result > 0) {
System.out.println("成功");
} else {
System.out.println("失败");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list(req, new Page<SysWorker>());
}
service层:
int batchInsert(List<SysWorker> list);
serviceImpl层:
@Override
public int batchInsert(List<SysWorker> list) {
int result = 0;
//mysql不要一次性插入超过999条数据
if(list.size() > 999) {
//分批次插入
int count = list.size() / 999;
//分批次插入的集合
List<List> subList = new ArrayList();
for(int i=1; i<= count ; i++) {
//截取list集合 0 - 999
subList.add(list.subList( (i-1)*999 , i*999));
if(i == count && list.size() % 999 != 0) {
//有999的余数
subList.add(list.subList(i*999, list.size() - 1));
}
}
//分批次插入
for (List list2 : subList) {
result += sysWorkerMapper.batchInsert(list2);
}
}else {
result = sysWorkerMapper.batchInsert(list);
}
return result;
}
mapper.xml:
<insert id="batchInsert" parameterType="com.st.eleventh.model.SysWorker" >
insert into s_worker( w_account,w_pwd )
values
<foreach collection="list" item = "car" index="index" separator=",">
(#{car.w_account} , #{car.w_pwd})
</foreach>
</insert>
model层:(实体类的属性要加注解,注解名要跟导入Excel数据的列名一样,进行对应封装数据)
package com.st.eleventh.model;
import java.io.Serializable;
import cn.afterturn.easypoi.excel.annotation.Excel;
public class SysWorker implements Serializable {
private Integer w_id;
@Excel(name = "创建人")
private String w_name;
private String w_sex;
private String w_phone;
@Excel(name = "部门名称")
private String w_account;
//自己加setter,getter方法
}
要导入的Excel表数据:
注:如果你要导入的Excel表数据有多列,那你用来封装的类的属性上要对应加上注解@Excel(name = "对应Excel表列名")
好了,导入就这么简单。