一、前言
最近做了一个导入Excel的功能,需求:
- 先提供一个下载Excel模板的功能。
- 用户下载好模板后,可以在模板文件当中填写要上传的内容,填写完过后再进行导入Excel,然后将用户填写的数据保存到数据库当中。
二、下载模板
1.将模板放到resources目录下,尽量创建一个专门的文件夹来存放模板,如下:
2.这里我用到了两个依赖,一个是hutool目前最火的工具类,easyexcel基本上导入导出Excel都会用。
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.18</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.2.1</version>
</dependency>
@GetMapping("/downInChargeOfTemplate")
public void downInChargeOfTemplate(HttpServletResponse response) {
downloadService.downInChargeOfTemplate(response);
}
import cn.hutool.core.io.IoUtil;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
@Service
public class DownloadService {
public void downInChargeOfTemplate(HttpServletResponse response) {
responseSetting(response, "各分任务负责人导入模板", ".xlsx",
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
InputStream inputStream = null;
OutputStream outputStream = null;
try {
// 读取文件的输入流
inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("templates/各分任务负责人导入模板.xlsx");
XSSFWorkbook wb = new XSSFWorkbook(inputStream);
outputStream = response.getOutputStream();
wb.write(outputStream);
outputStream.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
IoUtil.close(inputStream);
IoUtil.close(outputStream);
}
}
public void responseSetting(HttpServletResponse response, String fileName, String suffix, String contentType) {
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
String newFileName = null;
try {
newFileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
// 当客户端请求的资源是一个可下载的资源(这里的“可下载”是指浏览器会弹出下载框或者下载界面)时,对这个可下载资源的描述(例如下载框中的文件名称)就是来源于该头域。
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + newFileName + suffix);
// 服务器告诉浏览器它发送的数据属于什么文件类型,也就是响应数据的MIME类型
response.setContentType(contentType);
response.setCharacterEncoding("utf-8");
// 关闭缓存(HTTP/1.1)
response.setHeader("Cache-Control", "no-store");
// 关闭缓存(HTTP/1.0)
response.setHeader("Pragma", "no-cache");
// 缓存有效时间
response.setDateHeader("Expires", 0);
}
}
3.测试接口
4.补充知识
在拿到文件的InputStream输入流之后我们也可以不通过XSSFWorkbook将输入流写到输出流当中,可以直接使用流拷贝的方式,这种同样是可以完成导出模板功能的。
文章来源:https://www.toymoban.com/news/detail-613932.html
三、Excel导入
关于导入功能,直接参考easyexcel官网即可:https://easyexcel.opensource.alibaba.com/docs/current/quickstart/read文章来源地址https://www.toymoban.com/news/detail-613932.html
到了这里,关于Java下载excel模板文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!