1. 程式人生 > >js-xlsx 實現檔案的匯入匯出。

js-xlsx 實現檔案的匯入匯出。

一、前言

最近做的一個基於html5的移動APP,其中一功能的實現基於對excel表格資料的讀入讀出。流程是先匯入檔案,存到相關的資料庫中(專案不是用localStorage,本次只是用來演示),再從資料庫取出資料匯出到檔案中,因此想要利用html+js實現。通過搜尋github確定了利用js-xlsx。

二、匯入

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>匯入檔案</title>
    <!--引入js-xlsx-->
<script src="http://oss.sheetjs.com/js-xlsx/xlsx.full.min.js" ></script> </head> <body> <script> function importFile(obj) {//匯入 if(!obj.files) { return; } // alert(obj.files[0].name);檔名 var f = obj.files[0]; var reader = new FileReader(); reader.onload = function
(e) {
var data = e.target.result; var wb = XLSX.read(data, { type: 'binary' //以二進位制的方式讀取 }); var sheet0=wb.Sheets[wb.SheetNames[0]];//sheet0代表excel表格中的第一頁 var str=XLSX.utils.sheet_to_json(sheet0);//利用介面實現轉換。 var templates=new
Array(); var str1=obj.files[0].name; templates=str1.split(".");//將匯入檔名去掉字尾 alert(JSON.stringify(str)); window.localStorage.setItem(templates[0],JSON.stringify(str))//存入localStorage 中 } reader.readAsBinaryString(f); }
</script> <div id="import"> <p>匯入模版</p> <p> 請選擇要選擇匯入的模版檔案</p> <input type="file" onchange="importFile(this)"> </div> </body> </html>

效果
這裡寫圖片描述
這裡寫圖片描述

三、匯出

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>匯出</title>
    <!--引入js-xlsx-->
    <script src="http://oss.sheetjs.com/js-xlsx/xlsx.full.min.js" ></script>
    <!--引入jQuery-->
     <script src="http://code.jquery.com/jquery-1.4.1.min.js"></script>
    <script>
        //將localStorage的資料庫中的key遍歷出來供選擇
        function loadFileName(){
            for(var i=0;i<window.localStorage.length;i++){
                $("#selectFile").append("<option value="+window.localStorage.key(i)+">"+window.localStorage.key(i)+"</option>")

            }
        }
    </script>
</head>
<body onload="loadFileName()">
<div id="export">
    <p>匯出資料</p>
    <select  id="selectFile">
        <option value="null">請選擇檔案</option>
    </select>
    <button onclick="exportData()">確定</button>

</div>


<script>


    function exportData() {
       var getFile = document.getElementById("selectFile");
        getFile.options.selected =true ;
       var fileName=getFile.value;

       if (fileName=="null"){
           alert('請先選擇檔案');
           return 0;
       }
       var str=window.localStorage.getItem(fileName);

        var sheet0=XLSX.utils.json_to_sheet(JSON.parse(str));
        var wopts = { bookType:'xlsx', bookSST:false, type:'binary' };
        var  wb = { SheetNames: ['Sheet0'], Sheets: {}, Props: {} };
        wb.Sheets['Sheet0'] = sheet0;//轉化成workbooks形式。
        var wbout = XLSX.write(wb,wopts);
         //轉換流形式
        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;
        }
        /* the saveAs call downloads a file on the local machine */
        //自定義儲存檔案方式,原專案採用的是cordova的檔案寫入方式,此演示只用模擬瀏覽器下載的形式
       saveAs(new Blob([s2ab(wbout)],{type:""}),fileName+".xlsx");

   }
function saveAs(obj,fileName) {
    var tmpa = document.createElement("a");
    tmpa.download = fileName || "下載";
    tmpa.href = URL.createObjectURL(obj);
    tmpa.click();
    setTimeout(function () {
        URL.revokeObjectURL(obj);
    }, 100);
}


</script>




</body>
</html>

效果這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述