方法一
/**
* 导出表格数据到 Excel 文件
* @param {Array} tableData - 表格数据
* @param {Array} fieldLabels - 表头组成的数组
* @param {Array} fieldKeys - 列属性名组成的数组
* @param {String} fileName - 导出的文件名
*/
function exportExcel(tableData, fieldLabels, fieldKeys, fileName) {
let dataStr = fieldLabels.toString() + '\r\n';
tableData.forEach(item => {
fieldKeys.forEach(key => {
// 加引号是为了使换行符在单元格内正常显示
dataStr += `"${
item[key]}"\t,`;
});
dataStr += '\r\n';
});
// encodeURIComponent 解决中文乱码
const url = "data:text/xls;charset=utf-8,\ufeff" + encodeURIComponent(dataStr);
const link = document.createElement("a");
link.href = url;
link.download = fileName + ".xls";
link.style.display = 'none';
document.body.appendChild(link);
link.click();
document.body.removeChild(link); //释放标签
}
遇到的问题
为了让单元格中的数据不被转换格式(如 过大的数字会被转为科学技术法显示),需要在数据后面加多余的字符,如以上代码的 \t。
示例
const tableData = [
{
date: '2016-05-02', name: '王小虎', address: '上海市普陀区金沙江路 1518 弄' },
{
date: '2016-05-04', name: '张小星', address: '上海市普陀区金沙江路 1517 弄' },
{
date: '2016-05-01', name: '刘小备', address: '上海市普陀区金沙江路 1519 弄' },
{
date: '2016-05-03', name: '赵小云', address: '上海市普陀区金沙江路 1516 弄' }
],
fieldKeys = ['date', 'name', 'address'],
fieldLabels = ['日期', '姓名', '地址'],
fileName = '测试文件';
exportExcel(tableData, fieldLabels, fieldKeys, fileName);
方法二
方法一
/**
* 导出表格数据到 Excel 文件
* @param {Array} table