概述
功能说明
- 页面原来存在查询功能,现新增下载功能,将查询出来的数据导出至Excel表格
- 数据传输格式为json
解决方案
- 前端发起下载请求
- 后台根据查询条件先查询出数据
- 后台将数据生成Excel表格
- 将Excel表格转为base64字符串,放入json,传给前端
- 前端获取json中的文件字符串,开启下载
关键代码
前端请求及返回处理
导出按钮
<el-button type="success" icon="el-icon-download" @click="downloaddata">导出</el-button>
开启下载方法
methods: {
downloaddata() {
// axios发起请求
this.$axios({
method: 'post',
url: '/xxx',
data: {
"age": this.UserAge,
...
}
}).then((res) => {
// 将base64格式文件转为blob供下载
function dataURLtoBlob(base64Str) {
var bstr = atob(base64Str), n = bstr.length, u8arr = new Uint8Array(n);
while (n--) {
u8arr[n] = bstr.charCodeAt(n);
}
// 这里设置的是excel格式的文件,其他格式见后文
return new Blob([u8arr], { type: "application/vnd.ms-excel" });
}
const blob = dataURLtoBlob(res.data.base64file) // 入参为json中的base64编码文件
const url = window.URL.createObjectURL(blob);
// 开启下载任务
const link = document.createElement('a');
link.style.display = 'none';
link.href = url;
link.download = `xx信息表.xlsx`; // 下载文件名
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}).catch((error) => {
console.log(error)
})
}
}
其他格式举例
'doc' => 'application/msword',
'bin' => 'application/octet-stream',
'exe' => 'application/octet-stream',
'so' => 'application/octet-stream',
'dll' => 'application/octet-stream',
'pdf' => 'application/pdf',
'ai' => 'application/postscript',
'xls' => 'application/vnd.ms-excel',
'ppt' => 'application/vnd.ms-powerpoint',
'dir' => 'application/x-director',
'js' => 'application/x-javascript',
'swf' => 'application/x-shockwave-flash',
'xhtml' => 'application/xhtml+xml',
'xht' => 'application/xhtml+xml',
'zip' => 'application/zip',
'mid' => 'audio/midi',
'midi' => 'audio/midi',
'mp3' => 'audio/mpeg',
'rm' => 'audio/x-pn-realaudio',
'rpm' => 'audio/x-pn-realaudio-plugin',
'wav' => 'audio/x-wav',
'bmp' => 'image/bmp',
'gif' => 'image/gif',
'jpeg' => 'image/jpeg',
'jpg' => 'image/jpeg',
'png' => 'image/png',
'css' => 'text/css',
'html' => 'text/html',
'htm' => 'text/html',
'txt' => 'text/plain',
'xsl' => 'text/xml',
'xml' => 'text/xml',
'mpeg' => 'video/mpeg',
'mpg' => 'video/mpeg',
'avi' => 'video/x-msvideo',
'movie' => 'video/x-sgi-movie',
后台生成Excel并返回
引入java支持excel表操作的依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
<scope>compile</scope>
</dependency>
建立Excel工具类
public class ExcelUtil {
/**
* @param sheetName sheet表名
* @param title 表标题
* @param values 表内容
* @param wb excel表文件,可为null
* @return 返回一张excel表
*/
public static HSSFWorkbook getHSSFWorkbook(String sheetName, String[] title, String[][] values, HSSFWorkbook wb) {
// 创建一个HSSFWorkbook,对应一个Excel文件
if (wb == null) {
wb = new HSSFWorkbook();
}
// 在workbook中添加一个sheet,对应Excel文件中的sheet
HSSFSheet sheet = wb.createSheet(sheetName);
// 在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制
HSSFRow row = sheet.createRow(0);
// 创建单元格,并设置值表头 设置表头居中
HSSFCellStyle style = wb.createCellStyle();
style.setAlignment(HorizontalAlignment.CENTER); // 创建一个居中格式
// 声明列对象
HSSFCell cell = null;
// 创建标题
for (int i = 0; i < title.length; i++) {
cell = row.createCell(i);
cell.setCellValue(title[i]);
cell.setCellStyle(style);
}
//创建内容
for (int i = 0; i < values.length; i++) {
row = sheet.createRow(i + 1);
for (int j = 0; j < values[i].length; j++) {
//将内容按顺序赋给对应的列对象
row.createCell(j).setCellValue(values[i][j]);
}
}
return wb;
}
}
生成excel表
String[] title = {"姓名", "年龄", "电话", "住址"};
String sheetName = "sheet1";
String[][] values = new String[list.size()][title.length];
for (int i = 0; i < list.size(); i++) { // list中存放了查询出来的用户数据
User user = list.get(i);
values[i][0] = user.getName();
values[i][1] = user.getAge();
values[i][2] = user.getPhoneNumber();
values[i][3] = user.getAddress();
}
HSSFWorkbook wb = ExcelUtil.getHSSFWorkbook(sheetName, title, values, null);
将表格以base64编码为字符串,然后放入json返回
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
try {
wb.write(byteArrayOutputStream);
} catch (IOException e) {
e.printStackTrace();
}
byte[] bytes = byteArrayOutputStream.toByteArray();
String base64file = Base64Utils.encodeToString(bytes);
// 放入json
resultJson.put("base64file", base64file);
最后
以上就是着急项链为你收集整理的Java生成文件放入json传至前端下载(以Excel为例)的全部内容,希望文章能够帮你解决Java生成文件放入json传至前端下载(以Excel为例)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复