使用javascript純前端導出excel

前言(感謝技術的分享者)

參考博客地址
github地址
由SheetJS出品的js-xlsx是一款非常方便的只需要純JS即可讀取和導出excel的工具庫,功能強大,支持格式衆多,支持xls、xlsx、ods(一種OpenOffice專有表格文件格式)等十幾種格式。

demo(上面參考博客寫的很清楚,只給一個我的demo)

<script type="text/javascript" src="xlsx.core.min.js"></script>
<table id="_searchTable" border="1" bordercolor="#d9edf7" style="width: 100%;">
</table>
<button type="button" class="btn btn-default btn-sm" onclick="Search();">統計</button>
function exportExcel() {
        var sheet = XLSX.utils.table_to_sheet($("#_searchTable")[0]);
        var blob = sheet2blob(sheet);
        openDownloadDialog(blob, '社會服務彙總表.xlsx');
    }
    // 將一個sheet轉成最終的excel文件的blob對象,然後利用URL.createObjectURL下載
    function sheet2blob(sheet, sheetName) {
        sheetName = sheetName || 'sheet1';
        var workbook = {
            SheetNames: [sheetName],
            Sheets: {}
        };
        workbook.Sheets[sheetName] = sheet;
        // 生成excel的配置項
        var wopts = {
            bookType: 'xlsx', // 要生成的文件類型
            bookSST: false, // 是否生成Shared String Table,官方解釋是,如果開啓生成速度會下降,但在低版本IOS設備上有更好的兼容性
            type: 'binary'
        };
        var wbout = XLSX.write(workbook, wopts);
        var blob = new Blob([s2ab(wbout)], {type:"application/octet-stream"});
        // 字符串轉ArrayBuffer
        function s2ab(s) {
            var buf = new ArrayBuffer(s.length);
            var view = new Uint8Array(buf);
            for (var i=0; i!=s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;
            return buf;
        }
        return blob;
    }
    /**
     * 通用的打開下載對話框方法,沒有測試過具體兼容性
     * @param url 下載地址,也可以是一個blob對象,必選
     * @param saveName 保存文件名,可選
     */
    function openDownloadDialog(url, saveName)
    {
        if(typeof url == 'object' && url instanceof Blob)
        {
            url = URL.createObjectURL(url); // 創建blob地址
        }
        var aLink = document.createElement('a');
        aLink.href = url;
        aLink.download = saveName || ''; // HTML5新增的屬性,指定保存文件名,可以不要後綴,注意,file:///模式下不會生效
        var event;
        if(window.MouseEvent) event = new MouseEvent('click');
        else
        {
            event = document.createEvent('MouseEvents');
            event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
        }
        aLink.dispatchEvent(event);
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章