返回目录:excel表格制作
第一步:加入需要的依赖
第二步:工具类
import org.apache.poi.xssf.usermodel.*;
import org.springframework.core.io.ClassPathResource;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 功能说明:文件工具类
* @author xuwen
* @date 2019/04/22
*/
public class FileUtils {
/**
* 导出文件
* @param response 请求响应
* @param sheetName Sheet名称
* @param headers 表头
* @param stringList 表数据
*/
public static void downloadExcelFile(HttpServletResponse response, String sheetName, String[] headers,
List
FileUtils.exportExcelFile(response, FileUtils.createExcelFile(sheetName, headers, stringList));
}
/**
* 创建excel文件
* @param sheetName Sheet名称
* @param headers 表头
* @param stringList 表数据
* @author xuwen
*/
private static XSSFWorkbook createExcelFile(String sheetName, String[] headers, List
// 创建excel文件
XSSFWorkbook workbook = new XSSFWorkbook();
// 设置excel文件格式
XSSFCellStyle cellStyle = workbook.createCellStyle();
// 设置sheet名称
XSSFSheet sheet = workbook.createSheet(sheetName);
// 初始化行号
int rowNum = 0;
// 创建表头行
XSSFRow row = sheet.createRow(rowNum);
// 填充表头
for (int m = 0; m < headers.length; m++) {
XSSFCell cell = row.createCell(m);
cell.setCellValue(headers[m]);
}
// 填充表格数据
for (int n = 0; n < stringList.size(); n++) {
XSSFRow dataRow = sheet.createRow(++rowNum);
String[] data = stringList.get(n);
for (int j = 0; j < data.length; j++) {
dataRow.createCell(j).setCellValue(data[j]);
}
}
return workbook;
}
/**
* 下载模板
* @param response 请求响应
* @param file 文件
* @author xuwen
*/
public static void downloadTemplate(HttpServletResponse response, String file) {
try {
ClassPathResource classPathResource = new ClassPathResource(file);
InputStream inputStream = classPathResource.getInputStream();
XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
FileUtils.exportExcelFile(response, workbook);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 在响应中返回文件流
* @param response 请求响应
* @param workbook excel文件
* @author xuwen
*/
public static void exportExcelFile(HttpServletResponse response, XSSFWorkbook workbook) {
response.setContentType("application/octet-stream;charset=UTF-8");
String excelFileName = "export.xlsx";
try {
response.addHeader("Content-Disposition", "attachment;filename="
+ new String(excelFileName.getBytes("GB2312"), "iso8859-1"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
try {
OutputStream outputStream = response.getOutputStream();
workbook.write(outputStream);
outputStream.flush();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
第三步:前端部分
自定义一个点击事件 在 Ajax/Axios/Fetch 的 成功回调函数 里触发此方法即可。(这一步使用vue和jquery都一样,因为使用的是原生js)
/**
* 下载文件
* @author xuwen
*/
export function download(data, fileName) {
let blob = new Blob([data]); //创建一个blob对象
let a = document.createElement('a'); //创建一个标签
a.href = URL.createObjectURL(blob); // response is a blob
a.download = fileName; //文件名称
a.style.display = 'none';
document.body.appendChild(a);
a.click();
a.remove();
}
第四步:自定义业务逻辑
这里为了做简单示例,dao查询直接用Map接收数据。
public void exportExcel(HttpServletResponse response, String id) {
// sheet名称
String sheetName = "库存信息";
// 表头
String[] headers = {"序号", "编号", "名称", "下单时间"};
//查询需要导出报表的信息
List
List
int index = 0;
for (Map
index ++;
//String.valueOf() 和 .toString() 懒得判空,直接使用 +“” 变字符串
String[] strings = {String.valueOf(index), map.get("code") + "", map.get("name") + "", map.get("createDate") + ""};
strList.add(strings);
}
// 导出文件, 这里调用上面第二步给的工具类即可
FileUtils.downloadExcelFile(response, sheetName, headers, strList);
原文链接:https://blog.csdn.net/qq_41520146/article/details/103277233