js-export2Excel.js-带图片excel生成器

50 篇文章 1 订阅

js-export2Excel.js-带图片excel生成器 目录


前言

不足与改进方向

  1. 无法指定下载文件的名字
  2. 对内容的修改灵活性不足
  3. office excelxml了解不够深入

生成效果展示

在这里插入图片描述

模块 - export2Excel_module.js

// IE Type
const BasicConf = {
    Type: [
        "MSIE",
        "Firefox",
        "Chrome",
        "Opera",
        "Safari"
    ],
    URI: 'data:application/vnd.ms-excel;base64,',
    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">
                    <title>{title}</title>
                    <!--[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>{table}</table>
                    </body>
                </html>`,
    RegexpString: /http/,
};

let export2Excel = function(tHeadData, tBodyData, dataName, picWidth, picHeight) {
    this.explorer;
    this.idTmr;
    this.base64;
    this.format;
    this.excute(tHeadData, tBodyData, dataName, picWidth, picHeight);
}
export2Excel.prototype = {
    CleanUp() {
        window.clearInterval(this.idTmr);
    },

    GetExplorerType() {
        const explorer = window.navigator.userAgent;
        for(let i of BasicConf.Type){
            // console.log(i);
            if(explorer.indexOf(i) >= 0 ) {
                this.explorer = i;
                return;
            }
        }
    },

    JudgeType(data, name) {
        this.explorer == 'ie' ? this.tableToIE(data,name) : this.tableToNotIE(data,name);
        return;
    },

    tableToIE(data, name) {
        let curTbl = data,
            oXL = new ActiveXObject("Excel.Application");

        //创建AX对象excel
        let oWB = oXL.Workbooks.Add();
        //获取workbook对象
        let xlsheet = oWB.Worksheets(1);
        //激活当前sheet
        let sel = document.body.createTextRange();
        sel.moveToElementText(curTbl);
        //把表格中的内容移到TextRange中
        sel.select;
        //全选TextRange中内容
        sel.execCommand("Copy");
        //复制TextRange中内容
        xlsheet.Paste();
        //粘贴到活动的EXCEL中
        
        oXL.Visible = true;
        //设置excel可见属性

        try{
            let fname = oXL.Application.GetSaveAsFilename("Excel.xlsx", "Excel Spreadsheets (*.xls), *.xls");
        }catch(err) {
            console.log(`Nested catch caught: ${err}`);
        } finally {
            oWB.SaveAs(fname);
 
            oWB.Close(savechanges = false);
            //xls.visible = false;
            oXL.Quit();
            oXL = null;
            // 结束excel进程,退出完成
            window.setInterval(this.Cleanup, 1);
            this.idTmr = window.setInterval(this.CleanUp, 1);
        }
    },

    excute(tHeadData, tBodyData, dataName, picWidth, picHeight) {
        const re = BasicConf.RegexpString,
            th_len = tHeadData.length,
            tb_len = tBodyData.length;

        const width = picWidth,
            height = picHeight;

        // 添加表头信息
        let thead = '<thead><tr>';

        for (let i = 0; i < th_len; i++) {
            thead += '<th>' + tHeadData[i] + '</th>';
        }

        thead += '</tr></thead>';

        // 添加每一行数据
        let tbody = '<tbody>';

        for (let i = 0; i < tb_len; i++) {
            tbody += '<tr>';
            let row = tBodyData[i]; // 获取每一行数据
    
            for (let key in row) {
                if (re.test(row[key])) { // 如果为图片,则需要加div包住图片
                 
                    tbody += '<td style="width:' + width + 'px; height:' + height + 'px; text-align: center; vertical-align: middle"><div style="display:inline"><img src=\'' + row[key] + '\' ' + ' ' + 'width=' + '\"' + width + '\"' + ' ' + 'height=' + '\"' + height + '\"' + '></div></td>';
                } else {
                    tbody += '<td style="text-align:center">' + row[key] + '</td>';
                }
            }
            
            tbody += '</tr>';
        }
        
        tbody += '</tbody>';
    
        let table = thead + tbody;

        // export
        this.JudgeType(table, dataName);
        // console.log(dataName);
    }

}

export2Excel.prototype.tableToNotIE = (function() {
        
    const uri = BasicConf.URI;
    const template = BasicConf.template;

    this.base64 = (event) => window.btoa(unescape(encodeURIComponent(event)));
    this.format = (str, c) => {
        // console.log( str.replace(/{(\w+)}/g, (m,p)=>console.log(p)));
        return str.replace(/{(\w+)}/g,
                (m, p) => {
                    console.log(c[p]);
                    return c[p];
                });
    }

    return (table, name) => {
        const ctx = {
            title: 'fwx',
            worksheet: name,
            table
        };
        

        let link = document.createElement('a');
        
        link.setAttribute('href', 
            uri + this.base64(
                this.format(template,ctx)
            )
        );
        // console.log(link);
        link.click();
    }

})();

使用代码

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!-- <script src="./Excel-/Export2Excel.js"></script> -->
    <!-- <script src="./Excel-/Blob.js"></script> -->
    <script src="./export2Excel_module.js"></script>
    <script src="./main.js"></script>
</body>
</html>

main.js

// main.js
// pic
const conf = {
    pic: "https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=2801998497,4036145562&fm=27&gp=0.jpg",
    picWidth: 40,
    picHeight: 60,
    excelWorkBookName: 'test'
};
// header, body
const tHeader = [
    'flower',
    'color',
    'pic'
];

const tBody = [
    {
        name: 'rose',
        color: 'red',
        pic: conf.pic
    },
    {
        name: 'rose2',
        color: 'red',
        pic: conf.pic
    },
    {
        name: 'rose3',
        color: 'red',
        pic: conf.pic
    }
];



let test = new export2Excel(tHeader, tBody, conf.excelWorkBookName, conf.picWidth, conf.picHeight);
// export2Excel(tHeader, tBody, 'test')
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: js-export-excel是一个JavaScript库,用于在网页中导出Excel文件。 这个库提供了一个简单易于使用的方法,可以将表格或数据导出为Excel文件。我们只需要在网页中引入这个库,并调用相应的方法,就可以实现导出Excel的功能。 使用js-export-excel的好处是,它支持多种数据格式的导出,包括纯文本、表格、图像等。我们可以根据具体的需求选择合适的导出格式。 另外,这个库还提供了一些定制化的选项,可以设置Excel文件的名称、文件格式、样式等。我们可以通过这些选项来控制导出文件的外观和功能。 使用js-export-excel并不复杂。我们只需要在需要导出Excel的地方执行相应的代码,就可以将数据导出为Excel文件。这对于需要频繁导出数据的网站或应用程序来说,非常方便。 总之,js-export-excel是一个非常实用的JavaScript库,可以帮助我们在网页中实现导出Excel的功能。无论是导出表格、文本还是图像,都可以通过这个库来实现。而且,它的使用非常简单,只需要引入库文件并调用相应的方法即可。 ### 回答2: js-export-excel是一个用于在前端网页中导出Excel文件的JavaScript库。它提供了一种简单方便的方法,让开发人员能够将数据导出为Excel文件,从而方便地进行数据分析和报表生成等工作。 它的使用非常简单,只需在前端页面引入相关的JavaScript文件,并在需要导出Excel的地方调用对应的函数即可。通过传递需要导出的数据和文件名等参数,js-export-excel会自动将数据转换为Excel文件,并提供下载链接。 此外,js-export-excel还支持一些可选参数,比如设置Excel文件的表头、内容样式、日期格式等。这些参数可以根据实际需求进行调整,使导出的Excel文件更符合个性化的需求。 js-export-excel的主要优点是简单易用,无需后端服务的支持,可以直接在前端实现数据导出功能。它支持大部分现代浏览器,并且具备良好的兼容性。 然而,需要注意的是,js-export-excel只适用于将前端页面中的记录导出为Excel文件,并不支持对已有Excel文件的编辑和操作。如果需要在前端页面中对Excel文件进行更复杂的操作,可能需要其他更专业的JavaScript库或后端服务的支持。 ### 回答3: js-export-excel是一种用于在JavaScript中导出Excel文件的库。它提供了一种简单的方式来生成包含表格数据的Excel文件,并且可以通过浏览器直接下载。 使用js-export-excel,我们可以通过以下几个步骤来导出Excel文件: 1. 引入js-export-excel库:我们需要将js-export-excel库的脚本文件引入到我们的HTML页面中,可以通过CDN链接或者下载本地文件进行引入。 2. 创建Excel数据:我们需要定义一个包含要导出的表格数据的数组。每个数组元素表示一行数据,每个元素的属性表示行中的列数据。 3. 配置Excel表格:我们可以定义一些表格的展示配置,例如表头样式、单元格样式等,以及一些相关的选项,如是否显示边框、是否冻结表头等。 4. 导出Excel文件:使用js-export-excel提供的方法,我们可以将表格数据和配置传入,然后生成Excel文件并以文件形式下载到浏览器。 js-export-excel是一个功能强大且易于使用的库,它使得在前端开发中导出Excel文件变得简单和便捷。无论是用于数据报表、数据导出还是数据备份等需求,都可以利用js-export-excel来实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值