前言:
- 各种
js
库用起来冗余,并且只想简单的导出excel
文件- 选择
table
标签是为了后期能定制化内容
0、效果预览
excel文件:
浏览器控制台
触发下载:
1、定义工具函数:
// xlsxExport.js
/**
*纯前端 原生导出excel
*/
const trans2Base64 = (content) => {
return window.btoa(unescape(encodeURIComponent(content)));
};
export const exportExcelFromFront = (params) => {
const { cellList, headerList, caption, exportName = 'exportName' } = params;
const captionEle = caption ? `<caption>${caption}</caption>` : ''; // 表格标题
const headerEle = `<tr>${headerList?.map((item) => `<th>${item}</th>`)?.join('')}</tr>`;
const cellEle = cellList
?.map((itemRow) => `<tr>${itemRow?.map((itemCell) => `<td>${itemCell}</td>`)?.join('')}</tr>`)
?.join('');
const excelContent = `${captionEle}${headerEle}${cellEle}`;
let excelFile =
"<html xmlns:o='urn:schemas-microsoft-com:office:office' xmlns:x='urn:schemas-microsoft-com:office:excel' xmlns='http://www.w3.org/TR/REC-html40'>";
excelFile +=
'<head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head>';
excelFile += "<body><table width='10%' border='1'>";
excelFile += excelContent;
excelFile += '</table></body>';
excelFile += '</html>';
const link = `data:application/vnd.ms-excel;base64,${trans2Base64(excelFile)}`;
const a = document.createElement('a');
a.download = `${exportName}.xlsx`;
a.href = link;
a.click();
};
2、调用函数
// 根据自己的实际目录去调
import { exportExcelFromFront } from '@/utils/xlsxExport';
const handleExport = () => {
const caption="我是heander标题"
const headerList = ['标题1','标题2','标题3'];
const cellList = [
['内容1','内容2','内容3'],
['内容4','内容5','内容6'],
['内容7','内容8','内容9'],
];
const exportName='导出的文件名称'
const params = {
caption,
headerList,
cellList,
exportName,
};
exportExcelFromFront(params);
};
================
over了