1、pom.xml文件增加依赖:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
</dependency>
2、接口代码如下:
/**
* 企业列表--导出
*/
@GetMapping(value = "/downloadTenantList")
public void downloadTenantList(HttpServletRequest request,HttpServletResponse response) {
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("utf-8");
Workbook wb = new SXSSFWorkbook(500);
Sheet sheet = wb.createSheet();
wb.setSheetName(0,"企业");
Row titleRow1 = sheet.createRow(0);
titleRow1.setHeightInPoints(30);
Cell titleCellID = titleRow1.createCell(0);
titleCellID.setCellValue("ID");
Cell titleCellName = titleRow1.createCell(1);
titleCellName.setCellValue("名称");
Row titleRow2 = sheet.createRow(1);
titleRow2.setHeightInPoints(30);
Cell valCellID2 = titleRow2.createCell(0);
valCellID2.setCellValue("ID");
Cell valCellName2 = titleRow2.createCell(1);
valCellName2.setCellValue("名称");
try
{
wb.write(response.getOutputStream());
}
catch (Exception e)
{
log.error("导出企业Excel异常{}", e.getMessage());
}
finally
{
IOUtils.closeQuietly(wb);
}
}
3、前端代码如下,可以作为参考,但需要根据实际情况整理
import { saveAs } from 'file-saver'
function blobValidate(data) {
return data.type !== 'application/json'
}
/**
* 参数处理
* @param {*} params 参数
*/
export function tansParams(params) {
let result = ''
for (const propName of Object.keys(params)) {
const value = params[propName];
var part = encodeURIComponent(propName) + "=";
if (value !== null && value !== "" && typeof (value) !== "undefined") {
if (typeof value === 'object') {
for (const key of Object.keys(value)) {
if (value[key] !== null && value[key] !== "" && typeof (value[key]) !== 'undefined') {
let params = propName + '[' + key + ']';
var subPart = encodeURIComponent(params) + "=";
result += subPart + encodeURIComponent(value[key]) + "&";
}
}
} else {
result += part + encodeURIComponent(value) + "&";
}
}
}
return result
}
export function download(url, params, filename, config) {
downloadLoadingInstance = Loading.service({ text: "正在下载数据,请稍候", spinner: "el-icon-loading", background: "rgba(0, 0, 0, 0.7)", })
return service.post(url, params, {
transformRequest: [(params) => { return tansParams(params) }],
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
responseType: 'blob',//使用这个或者{responseType:'arraybuffer'}
...config
}).then(async (data) => {
const isBlob = blobValidate(data);
if (isBlob) {
const blob = new Blob([data])
saveAs(blob, filename)
} else {
const resText = await data.text();
const rspObj = JSON.parse(resText);
const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default']
Message.error(errMsg);
}
downloadLoadingInstance.close();
}).catch((r) => {
console.error(r)
Message.error('下载文件出现错误,请联系管理员!')
downloadLoadingInstance.close();
})
}
这样就可以通过调用接口的方式导出excel文件,请求接口就可以在header中设置认证头