纯前端实现JSON数据转excel文件并下载

1,697 阅读2分钟

本人已参与「新人创作礼」活动,一起开启掘金创作之路。

如何用前端让一个JSON数据下载成excel文件?

其实,实现JSON数据转excel文件的方法有很多。

下面是其中一种方法,大家复制走直接就可以用

/**
 * JS转成ex文件,前端进行导出
 * @param {*} JSONData  JSON数据
 * @param {*} FileName   你希望导出文件的文件名
 * @param {*} title     你希望的字段名也就是表头,一般情况下直接,没有特殊需求的话直接填入false就好
 * @param {*} filter   你希望过滤的行数   如果没有也直接填入false就好
 */
 const JSONToExcelConvertor = (JSONData, FileName, title, filter) => {
    if (!JSONData)
        return;
    //转化json为object
    var arrData = typeof JSONData != 'object' ? JSON.parse(JSONData) : JSONData;
    var excel = "<table>";
    //设置表头  
    var row = "<tr>";
    if (title) {
        //使用标题项
        for (var i in title) {
            row += "<th align='center'>" + title[i] + '</th>';
        }
    }
    else {
        //不使用标题项
        for (var i in arrData[0]) {
            row += "<th align='center'>" + i + '</th>';
        }
    }
    excel += row + "</tr>";
    //设置数据  
    for (var i = 0; i < arrData.length; i++) {
        var row = "<tr>";
        for (var index in arrData[i]) {
            //判断是否有过滤行
            if (filter) {
                if (filter.indexOf(index) == -1) {
                    var value = arrData[i][index] == null ? "" : arrData[i][index];
                    row += '<td>' + value + '</td>';
                }
            }
            else {
                var value = arrData[i][index] == null ? "" : arrData[i][index];
                row += "<td align='center'>" + value + "</td>";
            }
        }
        excel += row + "</tr>";
    }
    excel += "</table>";

    //下面是构建文件的代码
    var 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 += '<meta http-equiv="content-type" content="application/vnd.ms-excel; charset=UTF-8">';
    excelFile += '<meta http-equiv="content-type" content="application/vnd.ms-excel';
    excelFile += '; charset=UTF-8">';
    excelFile += "<head>";
    excelFile += "<!--[if gte mso 9]>";
    excelFile += "<xml>";
    excelFile += "<x:ExcelWorkbook>";
    excelFile += "<x:ExcelWorksheets>";
    excelFile += "<x:ExcelWorksheet>";
    excelFile += "<x:Name>";
    excelFile += "{worksheet}";
    excelFile += "</x:Name>";
    excelFile += "<x:WorksheetOptions>";
    excelFile += "<x:DisplayGridlines/>";
    excelFile += "</x:WorksheetOptions>";
    excelFile += "</x:ExcelWorksheet>";
    excelFile += "</x:ExcelWorksheets>";
    excelFile += "</x:ExcelWorkbook>";
    excelFile += "</xml>";
    excelFile += "<![endif]-->";
    excelFile += "</head>";
    excelFile += "<body>";
    excelFile += excel;
    excelFile += "</body>";
    excelFile += "</html>";
    var uri = 'data:application/vnd.ms-excel;charset=utf-8,' + encodeURIComponent(excelFile);
    //创建一个a标签
    var link = document.createElement("a");
    //给a标签一个路径
    link.href = uri;
    //为了防止这个a标签显示在视图上,需要先把他隐藏
    link.style = "visibility:hidden";
    //为文件添加后缀名,告诉他这是一个ex文件
    link.download = FileName + ".xls";
    //把a标签添加到body上
    document.body.appendChild(link);
    //触发a标签,等于访问这个文件地址,实现文件下载
    link.click();
    //文件下载完毕后删除a标签,以免对DOM产生冗余
    document.body.removeChild(link);
} 

以下是上方函数的使用模板

最简单的用法

 JSONToExcelConvertor(JSONData, '文件名', false, false);

下载成功

image.png

欢迎技术沟通,摸鱼聊天~

备注来自掘金~

wx:XXF1096032096