import grid

jQuery的三種不同架構 $(function(), (function($), $.fn.myFunctionName

http://www.j4.com.tw/web-design/%E5%B8%B8%E8%A6%8Bjquery%E7%9A%84%E4%B8%89%E7%A8%AE%E4%B8%8D%E5%90%8C%E6%9E%B6%E6%A7%8B-function-function-fn-myfunctionname/ 


https://codertw.com/%E5%89%8D%E7%AB%AF%E9%96%8B%E7%99%BC/281541/


Result:

*JSON

retjson:{"Sheet1":[{"code":"a","name":"b"},{"code":"c ","name":"d"},{"code":"e","name":"f"}]}

* easyui grid

Code
Name
a
b
c
d
e
f

1. excel to JSON
xlsx.full.min.js 現在因SheetJS/js-xlsx要支援新舊版Excel、OpenDocument Spreadsheet (ODS)等格式,分了好幾個模組,若想一次解決可選完整的單檔版xlsx.full.min.js。目前的版本號為0.8.2。測試功能正常後,我這邊也再小封裝一次方便自己與大家使用,讀存分別為:
https://cdnjs.com/libraries/xlsx
https://firsemisphere.blogspot.com/2017/02/javascriptsheetjsjs-xlsxjs.html

2.datagrdid import JSON 

$('#adcmSummary').datagrid('loadData', json.rsDataRow);

 $('#grid').datagrid('loadData', retjson.Sheet1);


3. xlsx.full.min.js download

https://www.cdnpkg.com/xlsx/file/xlsx.full.min.js/?id=78603#


=====

1.

<body>

    <input type="file" id="upload_input" />

    <h4>show json</h4>

    <pre id="upload_showjson"></pre>

    <h4>show csv</h4>

    <pre id="upload_showcsv"></pre>

    <button id="download_button">下載測試檔案</button>


    <table id="grid" class="easyui-datagrid"  >

    <thead>

        <tr>

            <th data-options="field:'code'">Code</th>

            <th data-options="field:'name'">Name</th>

        </tr>

    </thead>

    <tbody>

        <tr>

            <td>001</td><td>name1</td> 

        </tr>

        <tr>

            <td>002</td><td>name2</td> 

        </tr>

    </tbody>

</table>

</body>


2.

<head>

    <title>js-xlsx Demo</title>

    <meta charset="utf-8">



    <!--使用jQuery操作dom

    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>-->

<script src="easyui_js/jquery.min.js"></script>


    <!--使用JS-XLSX操作xlsx

    <script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.8.2/xlsx.full.min.js"></script>-->

<script src="easyui_js/xlsx.full.min.js"></script>


    <!--使用FileSaver下載資料成為檔案

    <script src="https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/1.3.3/FileSaver.min.js"></script>

-->

     <script src="easyui_js/jquery.easyui.min.js"></script>


    <script>


        //$(document).ready(

$(function () {

      


            //綁定change事件,讀xlsx檔

            $('#upload_input').on('change', function (e) {


                //取得上傳第一個檔案

                var files = e.target.files;

                var f = files[0]; 


                //使用FileReader讀檔

                var reader = new FileReader();


                //檔案名稱

                var name = f.name;


                //onload觸發事件

                reader.onload = function (e) {


                    //對象內資料

                    var data = e.target.result;


                    //讀取xlsx資料

                    var retjson = readxlsx(data, 'json');

                    var retcsv = readxlsx(data, 'csv');


                    console.log("retjson:"+JSON.stringify(retjson));


                  $('#grid').datagrid('loadData', retjson.Sheet1);

                    

                    //顯示內容

                    $('#upload_showjson').html(JSON.stringify(retjson, null, '\t'));

                    $('#upload_showcsv').html(retcsv);


                };


                //以BinaryString讀入

                reader.readAsBinaryString(f);


            });



            //綁定click事件,下載xlsx檔

 //           $('#download_button').on('click', function () {


                //檔名

 //               var filename = 'download.xlsx';


                //表名

//                var sheetname = 'test';


                //測試資料

//                var data = [

//                   ['name', 'number', 'date'],

//                    ['abc', 1, new Date().toLocaleString()],

//                    ['def', 123.456, new Date('2015-03-25T13:30:12Z')],

//                ];


                //下載

//                downloadxlsx(filename, sheetname, data);



//            })

        


        });



        function readxlsx(inpdata, fmt) {

            //讀取xlsx檔


            //參數

            //inpdata為由input file讀入之data

            //fmt為讀取格式,可有"json"或"csv",csv格式之分欄符號為逗號,分行符號為[\n]


            //說明

            //所使用函式可參考js-xlsx的GitHub文件[https://github.com/SheetJS/js-xlsx]



            //to_json

            function to_json(workbook) {

                var result = {};

                workbook.SheetNames.forEach(function (sheetName) {

                    var roa = XLSX.utils.sheet_to_row_object_array(workbook.Sheets[sheetName]);

                    if (roa.length > 0) {

                        result[sheetName] = roa;

                    }

                });

                return result;

            }



            //to_csv

            function to_csv(workbook) {

                var result = [];

                workbook.SheetNames.forEach(function(sheetName) {

                    var csv = XLSX.utils.sheet_to_csv(workbook.Sheets[sheetName]);

                    if(csv.length > 0){

                        result.push('SHEET: ' + sheetName);

                        result.push('\n');

                        result.push(csv);

                    }

                });

                return result;

            }



            //讀檔

            var workbook = XLSX.read(inpdata, { type: 'binary' });



            //轉為json物件回傳

            if (fmt === 'json') {

                return to_json(workbook);

            }

            else {

                return to_csv(workbook);

            }



        }



        function downloadxlsx(filename, sheetname, data) {

            //儲存xlsx檔


            //參數

            //filename為要下載儲存之xlsx檔名,,sheetname為資料表名,data為要下載之資料,需為二維陣列。以下為使用範例:

            //var filename = 'download.xlsx';

            //var sheetname = 'test';

            //var data = [

            //    ['name', 'number', 'date'],

            //    ['abc', 1, new Date().toLocaleString()],

            //    ['def', 123.456, new Date('2015-03-25T13:30:12Z')],

            //];

            //downloadxlsx(filename, sheetname, data);


            //說明

            //所使用函式可參考js-xlsx的GitHub文件[https://github.com/SheetJS/js-xlsx]



            //datenum

            function datenum(v, date1904) {

                if (date1904) v += 1462;

                var epoch = Date.parse(v);

                return (epoch - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);

            }

            //sheet_from_array_of_arrays

            function sheet_from_array_of_arrays(data, opts) {

                var ws = {};

                var range = { s: { c: 10000000, r: 10000000 }, e: { c: 0, r: 0 } };

                for (var R = 0; R != data.length; ++R) {

                    for (var C = 0; C != data[R].length; ++C) {

                        if (range.s.r > R) range.s.r = R;

                        if (range.s.c > C) range.s.c = C;

                        if (range.e.r < R) range.e.r = R;

                        if (range.e.c < C) range.e.c = C;

                        var cell = { v: data[R][C] };

                        if (cell.v == null) continue;

                        var cell_ref = XLSX.utils.encode_cell({ c: C, r: R });


                        if (typeof cell.v === 'number') cell.t = 'n';

                        else if (typeof cell.v === 'boolean') cell.t = 'b';

                        else if (cell.v instanceof Date) {

                            cell.t = 'n'; cell.z = XLSX.SSF._table[14];

                            cell.v = datenum(cell.v);

                        }

                        else cell.t = 's';


                        ws[cell_ref] = cell;

                    }

                }

                if (range.s.c < 10000000) ws['!ref'] = XLSX.utils.encode_range(range);

                return ws;

            }



            //s2ab

            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;

            }

            //Workbook

            function Workbook() {

                if (!(this instanceof Workbook)) return new Workbook();

                this.SheetNames = [];

                this.Sheets = {};

            }

            //write

            var wb = new Workbook();

            var ws = sheet_from_array_of_arrays(data);

            wb.SheetNames.push(sheetname);

            wb.Sheets[sheetname] = ws;

            var wbout = XLSX.write(wb, { bookType: 'xlsx', type: 'binary' });

            //saveAs

            saveAs(new Blob([s2ab(wbout)], { type: "application/octet-stream" }), filename)

        }

    </script>

</head>


留言

這個網誌中的熱門文章

考績被打差了 輕率離職會更傷

Arrays - DS (Reverse array) [Easy]

WireMock