package com.springboot.example.excel;
import com.springboot.example.excel.entity.User;
import lombok.extern.slf4j.Slf4j;
import net.sf.jxls.transformer.XLSTransformer;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.util.ResourceUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.*;
@RestController
@RequestMapping(value = "/")
@Slf4j
public class controller {
@RequestMapping(value = "/export", method = RequestMethod.GET)
public void excel(HttpServletResponse response) {
/**
* excel导出
* 1.获取数据集List 插入到map集合中
* 2.根据模板生成新的excel
* 3.将新生成的excel文件从浏览器输出
* 4.删除新生成的模板文件
*/
List<User> list = new ArrayList();
list.add(new User(1, "zs", 21, new Date()));
list.add(new User(2, "ls", 22, new Date()));
Map<String, Object> beans = new HashMap();
beans.put("list", list);
//加载excel模板文件
File file = null;
try {
file = ResourceUtils.getFile("classpath:excel/aaa.xlsx");
} catch (FileNotFoundException e) {
log.error("template file path cannot be found");
}
//配置下载路径
String path = "/download/";
createDir(new File(path));
//根据模板生成新的excel
File excelFile = createNewFile(beans, file, path);
//浏览器端下载文件
downloadFile(response, excelFile);
//删除服务器生成文件
deleteFile(excelFile);
}
/**
* 根据excel模板生成新的excel
*
* @param beans
* @param file
* @param path
* @return
*/
private File createNewFile(Map<String, Object> beans, File file, String path) {
XLSTransformer transformer = new XLSTransformer();
//可以写工具类来生成命名规则
String name = "bbb.xlsx";
File newFile = new File(path + name);
try (InputStream in = new BufferedInputStream(new FileInputStream(file));
OutputStream out = new FileOutputStream(newFile)) {
Workbook workbook = transformer.transformXLS(in, beans);
workbook.write(out);
out.flush();
return newFile;
} catch (Exception e) {
System.out.println(e.getMessage());
}
return newFile;
}
/**
* 将服务器新生成的excel从浏览器下载
*
* @param response
* @param excelFile
*/
private void downloadFile(HttpServletResponse response, File excelFile) {
/* 设置文件ContentType类型,这样设置,会自动判断下载文件类型 */
response.setContentType("multipart/form-data");
/* 设置文件头:最后一个参数是设置下载文件名 */
response.setHeader("Content-Disposition", "attachment;filename=" + excelFile.getName());
try (
InputStream ins = new FileInputStream(excelFile);
OutputStream os = response.getOutputStream()
) {
byte[] b = new byte[1024];
int len;
while ((len = ins.read(b)) > 0) {
os.write(b, 0, len);
}
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
/**
* 浏览器下载完成之后删除服务器生成的文件
* 也可以设置定时任务去删除服务器文件
*
* @param excelFile
*/
private void deleteFile(File excelFile) {
excelFile.delete();
}
//如果目录不存在创建目录 存在则不创建
private void createDir(File file) {
if (!file.exists()) {
file.mkdirs();
}
}
}
import com.springboot.example.excel.entity.User; |
import lombok.extern.slf4j.Slf4j; |
import net.sf.jxls.transformer.XLSTransformer; |
import org.apache.poi.ss.usermodel.Workbook; |
import org.springframework.util.ResourceUtils; |
import org.springframework.web.bind.annotation.RequestMapping; |
import org.springframework.web.bind.annotation.RequestMethod; |
import org.springframework.web.bind.annotation.RestController; |
import javax.servlet.http.HttpServletResponse; |
@RequestMapping(value = "/") |
public class controller { |
@RequestMapping(value = "/export", method = RequestMethod.GET) |
public void excel(HttpServletResponse response) { |
List<User> list = new ArrayList(); |
list.add(new User(1, "zs", 21, new Date())); |
list.add(new User(2, "ls", 22, new Date())); |
Map<String, Object> beans = new HashMap(); |
file = ResourceUtils.getFile("classpath:excel/aaa.xlsx"); |
} catch (FileNotFoundException e) { |
log.error("template file path cannot be found"); |
String path = "/download/"; |
createDir(new File(path)); |
File excelFile = createNewFile(beans, file, path); |
downloadFile(response, excelFile); |
private File createNewFile(Map<String, Object> beans, File file, String path) { |
XLSTransformer transformer = new XLSTransformer(); |
String name = "bbb.xlsx"; |
File newFile = new File(path + name); |
try (InputStream in = new BufferedInputStream(new FileInputStream(file)); |
OutputStream out = new FileOutputStream(newFile)) { |
Workbook workbook = transformer.transformXLS(in, beans); |
System.out.println(e.getMessage()); |
private void downloadFile(HttpServletResponse response, File excelFile) { |
/* 设置文件ContentType类型,这样设置,会自动判断下载文件类型 */ |
response.setContentType("multipart/form-data"); |
/* 设置文件头:最后一个参数是设置下载文件名 */ |
response.setHeader("Content-Disposition", "attachment;filename=" + excelFile.getName()); |
InputStream ins = new FileInputStream(excelFile); |
OutputStream os = response.getOutputStream() |
byte[] b = new byte[1024]; |
while ((len = ins.read(b)) > 0) { |
} catch (IOException ioe) { |
private void deleteFile(File excelFile) { |
private void createDir(File file) { |
}
package com.springboot.example.excel; |
标签:File,记录,导出,excel,excelFile,file,import,new
来源: https://www.cnblogs.com/aknife/p/11847842.html