加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 资源网站 > 资源 > 正文

js生成excel并导出

发布时间:2020-12-14 23:48:04 所属栏目:资源 来源:网络整理
导读:项目经理偶然和我说到是否能用纯js实现下载excel文件,特研究一下。 一、原生JS生成并下载excel 直接上代码: // 要导出的数据var testData = [{ aa: '测试1',bb: '123456789'}];// 列标题var str = 'trtd目的/tdtd啥玩意?/td/tr';// 循环遍历,每行加入tr

项目经理偶然和我说到是否能用纯js实现下载excel文件,特研究一下。

一、原生JS生成并下载excel

直接上代码:

// 要导出的数据
var testData = [{
    aa: '测试1',bb: '123456789'
}];
// 列标题
var str = '<tr><td>目的</td><td>啥玩意?</td></tr>';
// 循环遍历,每行加入tr标签,每个单元格加td标签
for (let i = 0,len = testData.length; i < len; ++i){
    str += '<tr>';
    for (let item in testData[i]){
        // 增加t为了不让表格显示科学计数法或者其他格式
        str += `<td>${ testData[i][item] + 't'}</td>`;
    }
    str += '</tr>';
}

解析json,将对应的数据解析到table中每行每列中去,很类似于表格dom的字符串拼接。如果是dom中加表格,我们直接append到对应的dom就行了。那excel的xml又是何种形式的呢?

// Worksheet名
var worksheet = 'Sheet1';
var uri = 'data:application/vnd.ms-excel;base64,';
// 下载的表格模板数据
var template = `<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">
    <head><meta charset='utf-8' /><!--[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><body><table>${str}</table></body></html>`;
// 转base64
var url = href = uri + window.btoa(unescape(encodeURIComponent(template)));
// 下载模板
downloadExcel(url,'test.xls');

按照规则组合模板数据,将最后的数据转成base64格式的。

最后一步,利用a标签下载对应的excel,

function downloadExcel(url,name) {
    // 利用a标签的download属性进行下载
    var link = document.createElement("a");

    // 设置a标签的属性
    link.href = url;
    link.download = name || 'work.xls';

    // 加入dom树中,模拟用户点击并下载
    document.body.appendChild(link);
    link.click();

    // 移除该元素,防泄漏
    document.body.removeChild(link);
}

我用2010打开对应的excel,提示以下错误,

《js生成excel并导出》

直接点击是就行了。

注:实际不是真正的生成了excel文件,而是生成了符合excel规范的xml文本(类似于table),然后被下载保存为*.xls的。

如何生成真正的excel,暂且我还不知道怎么处理。

excel是二进制文件,或许可以使用blob相关的去处理,先留个坑,后面摸索下。

整个文件:excelxml.html。

二、原生JS导出CSV并下载

csv是一种纯文本的文件,用js写的话不成问题,而excel又是支持打开csv文件的。

var testData = [{
    aa: '测试1',bb: '123456789'
}];
//列标题,逗号隔开,每一个逗号就是隔开一个单元格
var str = `姓名,电话,邮箱n`;
//增加t为了不让表格显示科学计数法或者其他格式
for (var i = 0,len = testData.length; i < len; ++i) {
    for (var item in testData[i]) {
        str += `${testData[i][item] + 't'},`;
    }
    str += 'n';
}

按照格式拼装好字符串,组好数据后,就可以下载了,

var url = 'data:text/csv;charset=utf-8,ufeff' + encodeURIComponent(str);
// 下载模板
downloadCSV(url,'test.csv');

下载的话与excel无两样,只有导出名称注意下。

整个文件:csv.html。

三、其他组件库

js-xlsx库,详细地址:https://github.com/SheetJS/js-xlsx/。

对应也有详细的demo可以查看,该库可以导出很多中数据格式的文件。

参考:

https://blog.csdn.net/hhzzcc_/article/details/80419396

http://demo.haoji.me/2017/02/08-js-xlsx/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读