Javascript JSON to Excel file download

前端 未结 6 2091
情书的邮戳
情书的邮戳 2020-12-31 18:14

I have Json data and i need convert json data to Excel file using javascript,

Reference URL : http://jsfiddle.net/hybrid13i/JXrwM/

i am using this code:

6条回答
  •  执念已碎
    2020-12-31 18:38

    I've created a class to export json data to excel file. I'll be happy if some productive edit is made in my code.

    Just add the class in your JS library and call:

    var myTestXML = new myExcelXML(myJsonArray);
    myTestXML.downLoad();
    

    My myExcelXML Class:

    let myExcelXML = (function() {
        let Workbook, WorkbookStart = '';
        const WorkbookEnd = '';
        let fs, SheetName = 'SHEET 1',
            styleID = 1, columnWidth = 80,
            fileName = "Employee_List", uri, link;
    
        class myExcelXML {
            constructor(o) {
                let respArray = JSON.parse(o);
                let finalDataArray = [];
    
                for (let i = 0; i < respArray.length; i++) {
                    finalDataArray.push(flatten(respArray[i]));
                }
    
                let s = JSON.stringify(finalDataArray);
                fs = s.replace(/&/gi, '&');
            }
    
            downLoad() {
                const Worksheet = myXMLWorkSheet(SheetName, fs);
    
                WorkbookStart += myXMLStyles(styleID);
    
                Workbook = WorkbookStart + Worksheet + WorkbookEnd;
    
                uri = 'data:text/xls;charset=utf-8,' + encodeURIComponent(Workbook);
                link = document.createElement("a");
                link.href = uri;
                link.style = "visibility:hidden";
                link.download = fileName + ".xls";
    
                document.body.appendChild(link);
                link.click();
                document.body.removeChild(link);
            }
    
            get fileName() {
                return fileName;
            }
    
            set fileName(n) {
                fileName = n;
            }
    
            get SheetName() {
                return SheetName;
            }
    
            set SheetName(n) {
                SheetName = n;
            }
    
            get styleID() {
                return styleID;
            }
    
            set styleID(n) {
                styleID = n;
            }
        }
    
        const myXMLStyles = function(id) {
            let Styles = '';
    
            return Styles;
        }
    
        const myXMLWorkSheet = function(name, o) {
            const Table = myXMLTable(o);
            let WorksheetStart = '';
            const WorksheetEnd = '';
    
            return WorksheetStart + Table + WorksheetEnd;
        }
    
        const myXMLTable = function(o) {
            let TableStart = '';
            const TableEnd = '';
    
            const tableData = JSON.parse(o);
    
            if (tableData.length > 0) {
                const columnHeader = Object.keys(tableData[0]);
                let rowData;
                for (let i = 0; i < columnHeader.length; i++) {
                    TableStart += myXMLColumn(columnWidth);
    
                }
                for (let j = 0; j < tableData.length; j++) {
                    rowData += myXMLRow(tableData[j], columnHeader);
                }
                TableStart += myXMLHead(1, columnHeader);
                TableStart += rowData;
            }
    
            return TableStart + TableEnd;
        }
    
        const myXMLColumn = function(w) {
            return '';
        }
    
    
        const myXMLHead = function(id, h) {
            let HeadStart = '';
            const HeadEnd = '';
    
            for (let i = 0; i < h.length; i++) {
                const Cell = myXMLCell(h[i].toUpperCase());
                HeadStart += Cell;
            }
    
            return HeadStart + HeadEnd;
        }
    
        const myXMLRow = function(r, h) {
            let RowStart = '';
            const RowEnd = '';
            for (let i = 0; i < h.length; i++) {
                const Cell = myXMLCell(r[h[i]]);
                RowStart += Cell;
            }
    
            return RowStart + RowEnd;
        }
    
        const myXMLCell = function(n) {
            let CellStart = '';
            const CellEnd = '';
    
            const Data = myXMLData(n);
            CellStart += Data;
    
            return CellStart + CellEnd;
        }
    
        const myXMLData = function(d) {
            let DataStart = '';
            const DataEnd = '';
    
            return DataStart + d + DataEnd;
        }
    
        const flatten = function(obj) {
            var obj1 = JSON.parse(JSON.stringify(obj));
            const obj2 = JSON.parse(JSON.stringify(obj));
            if (typeof obj === 'object') {
                for (var k1 in obj2) {
                    if (obj2.hasOwnProperty(k1)) {
                        if (typeof obj2[k1] === 'object' && obj2[k1] !== null) {
                            delete obj1[k1]
                            for (var k2 in obj2[k1]) {
                                if (obj2[k1].hasOwnProperty(k2)) {
                                    obj1[k1 + '-' + k2] = obj2[k1][k2];
                                }
                            }
                        }
                    }
                }
                var hasObject = false;
                for (var key in obj1) {
                    if (obj1.hasOwnProperty(key)) {
                        if (typeof obj1[key] === 'object' && obj1[key] !== null) {
                            hasObject = true;
                        }
                    }
                }
                if (hasObject) {
                    return flatten(obj1);
                } else {
                    return obj1;
                }
            } else {
                return obj1;
            }
        }
    
        return myExcelXML;
    })();
    

提交回复
热议问题