这里是在springboot项目下使用EasyExcel实现模板下载、数据导入功能。 顺便记录下自己遇到的一些坑。
一.模板下载
1.在你的工程下添加模板文件
2.编写代码实现下载功能
controller
//下载模板
@PostMapping(value="/downloadWorkplacedetail")
public void downloadWorkplacedetail(HttpServletRequest request, HttpServletResponse response) throws FileNotFoundException {
jobManageService.downloadWorkplacedetail(response);
}
serviceImpl
public void downloadWorkplacedetail(HttpServletResponse response) {
//方法一:直接下载路径下的文件模板(这种方式貌似在SpringCloud和Springboot中,打包成JAR包时,无法读取到指定路径下面的文件,不知道记错没,你们可以自己尝试下!!!)
try {
//文件名称
String fileName = "jobWorkplace.xlsx";
//设置要下载的文件的名称
setExcelRespProp(response,"jobWorkplace");
InputStream input = JobManageServiceImpl.class.getClassLoader().getResourceAsStream("/excel/" + fileName);
OutputStream out = response.getOutputStream();
byte[] b = new byte[2048];
int len;
while ((len = input.read(b)) != -1) {
out.write(b, 0, len);
}
input.close();
if (out != null) {
out.flush();
out.close();
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
好了,到这里,一个简单的下载模板功能就实现了。不过我在项目运行中遇到了一些坑,下面记录一下。
3.项目中遇到的坑:excel文件在springboot的maven项目下打了jar包后损坏
4.解决办法:试了很多种,主要有三种方式,首推荐第一种
(1)该问题主要是maven打包时过滤导致该文件损坏,所以解决方案就是去掉过滤即可,在pom.xml文件中加入如下配置
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<nonFilteredFileExtensions><!--不加这一行,xlsx文件会被过滤,然后在maven build的时候,去target下看对应的xlsx就是损坏的-->
<nonFilteredFileExtension>xlsx</nonFilteredFileExtension></nonFilteredFileExtensions>
</configuration>
</plugin>
</plugins>
</build>
(2).直接关闭所有过滤,resource–filtering直接设置为false:不过这样做有可能读取不到其他配置而出现错误
<resources>
<resource>
<directory>${project.basedir}/src/main/resources</directory>
<filtering>false</filtering>
</resource>
</resources>
(3).如果前两种都不怎么起效果的话…那就只能用比较笨以及麻烦的法子了:
在install命令打了jar包后,打开文件发现是损坏的,那么把jar包复制出来,用解压器打开,在文件目标位置替换一个好的进去。。。这样虽然也可以,但需要每次打jar包时都记得手动维护,所以并不推荐
二.模板导入
好了,接下来讲简单实现模板导入功能
1.添加EasyExcel依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.1.1</version>
</dependency>
2.实体类
public class WorkplacedetailEntity implements Serializable {
/**
* 主键
*/
@ExcelIgnore
private Long id;
/**
* 姓名
*/
@ExcelProperty("姓名")
@ColumnWidth(20)
private String name;
/**
* 电话
*/
@ExcelProperty("电话")
@ColumnWidth(20)
private String phone;
}
3.controller
//导入职场明细
@RequestMapping(value="/importWorkplacedetail")
public ResponseData importWorkplacedetail(MultipartHttpServletRequest request) throws Exception {
jobManageService.importWorkplacedetail(request);
return this.successResonse(null);
}
4.serviceImpl文章来源:https://www.toymoban.com/news/detail-641202.html
public void importWorkplacedetail(MultipartHttpServletRequest request) throws IOException {
MultipartFile file = request.getFile("file");
System.out.println("导入职场明细功能参数file="+file);
String unicomcode = request.getParameter("unicomcode");
System.out.println("导入职场明细功能参数unicomcode="+unicomcode);
DManagecomEntity query = new DManagecomEntity();
query.setUnicomcode(unicomcode);
Map<String, Object> data = this.queryDManagecom(query);
List<DManagecomEntity> dManagecomEntityList = (List<DManagecomEntity>) data.get("list");
//excel读取数据
List<WorkplacedetailEntity> workplacedetailEntityList = EasyExcel.read(new BufferedInputStream(file.getInputStream())).head(WorkplacedetailEntity.class).sheet().doReadSync();
System.out.println("解析到workplacedetailEntityList--------------------------------------------------------");
System.out.println("size="+workplacedetailEntityList.size());
System.out.println("workplacedetailEntityList="+workplacedetailEntityList);
workplacedetailEntityList.remove(0);
workplacedetailEntityList.stream().forEach(workplacedetailEntity -> {
workplacedetailEntity.setStatus("0");
if(null != dManagecomEntityList && dManagecomEntityList.size()>0){
workplacedetailEntity.setSecondarycomcode(dManagecomEntityList.get(0).getProvincecomcode());
workplacedetailEntity.setSecondarycomname(dManagecomEntityList.get(0).getProvincecomname());
workplacedetailEntity.setTertiarycomcode(dManagecomEntityList.get(0).getBranchcode());
workplacedetailEntity.setTertiarycomname(dManagecomEntityList.get(0).getBranchname());
}
this.insertOrUpdateWorkplacedetail(workplacedetailEntity);
});
}
好了,到这里就完成了。注意,本次是实现了后台接入字段名为file的file类型的参数和字段名为unicomcode的字符串参数。 如果仅仅需要一个file的话,那直接用file参数来接即可。文章来源地址https://www.toymoban.com/news/detail-641202.html
到了这里,关于使用EasyExcel实现模板下载、数据导入功能的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!