Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JSON到Excel文件下载_Javascript_Json - Fatal编程技术网

Javascript JSON到Excel文件下载

Javascript JSON到Excel文件下载,javascript,json,Javascript,Json,我有Json数据,我需要使用javascript将Json数据转换为Excel文件 参考网址: 我正在使用以下代码: function JSONToTSVConvertor(JSONData, ReportTitle, ShowLabel, myTemplateName){ //If JSONData is not an object then JSON.parse will parse the JSON string in an Object var arrData = ty

我有Json数据,我需要使用javascript将Json数据转换为Excel文件

参考网址:

我正在使用以下代码:

function JSONToTSVConvertor(JSONData, ReportTitle, ShowLabel, myTemplateName){

    //If JSONData is not an object then JSON.parse will parse the JSON string in an Object
    var arrData = typeof JSONData != 'object' ? JSON.parse(JSONData) : JSONData;
    var TSV = '';    
    //Set Report title in first row or line
    //TSV += ReportTitle + '\r\n\n';
    //This condition will generate the Label/Header
    if (ShowLabel) {
        var row = "";
        //This loop will extract the label from 1st index of on array
        for (var index in arrData[0]) {
            //Now convert each value to string and tab-seprated
            row += index + '    ';
        }
        row = row.slice(0, -1);
        //append Label row with line break
        TSV += row + '\r\n';
    }

    //1st loop is to extract each row
    for (var i = 0; i < arrData.length; i++) {
        var row = "";
        //2nd loop will extract each column and convert it in string tab-seprated
        for (var index in arrData[i]) {
            row += '"' + arrData[i][index] + '" ';
        }
        row.slice(0, row.length - 1);
        //add a line break after each row
        TSV += row + '\r\n';
    }

    if (TSV == '') {        
        alert("Invalid data");
        return;
    }   
    var blob = new Blob([TSV], {type: "data:text/tsv;charset=utf-8"});
    //Generate a file name

    var fileName = myTemplateName;
    //this will remove the blank-spaces from the title and replace it with an underscore
    fileName += ReportTitle.replace(/ /g,"_"); 
    saveAs(blob, ""+fileName+".tsv");
}
函数JSONToTSVConvertor(JSONData、ReportTitle、ShowLabel、myTemplateName){
//如果JSONData不是对象,那么JSON.parse将解析对象中的JSON字符串
var arrData=typeof JSONData!=“object”?JSON.parse(JSONData):JSONData;
var TSV=“”;
//在第一行或第一行设置报表标题
//TSV+=ReportTitle+'\r\n\n';
//此条件将生成标签/标题
如果(显示标签){
var行=”;
//此循环将从数组的第一个索引中提取标签
对于(arrData[0]中的var索引){
//现在,将每个值转换为字符串和制表符
行+=索引+“”;
}
row=row.slice(0,-1);
//用换行符追加标签行
TSV+=行+'\r\n';
}
//第一个循环是提取每一行
对于(变量i=0;i
此示例代码适用于csv和tsv格式。我需要Excel格式,我不认为有任何想法,请帮助我。 请提供一些示例代码。
谢谢

Excel是一种非常复杂的格式,有许多版本。如果您真的需要这样做,我将调查其他人编写的一些JavaScript库。在谷歌上搜索“javascript excel writer”以查看一些示例。

CSV,如前所述,就是excel文件本身。但是,在许多地区,上面的脚本生成的csv被错误地打开,excel将所有内容都放在一个单元格中。对原始脚本的小修改有帮助:只需将标题替换为“sep=,”

此处有更改的工作示例:


我花了一些时间来弄明白这一点,因此回答旧的问题以帮助其他人节省一些时间。

我知道回答有点晚,但我找到了一个很好的
angular
库,可以自己完成所有的艰苦工作

GITHUB:

图书馆直接下载:

Filesaver JS:

如何使用?

  • 在应用程序中包含该模块
  • var myapp=angular.module('myapp',['ngJsonExportExcel']))

  • 添加一个导出按钮,并使用
    ng json export excel
    指令将数据传递到该指令中
  • ng json导出excel:它是指令名

    数据:将导出的数据(JSON)

    报告字段:

    传递JSON中存在的列名和键,例如。 客户名称:“客户名称”

    HTML

    <button ng-json-export-excel data="dataList" report-fields="{'uesr.username': 'Heder 1', keyjson2: 'Header 2', keyjson3: 'Head 3'}" filename =" 'export-excel' " separator="," class="css-class"></button>
    

    我创建了一个类,用于将json数据导出到excel文件。如果在我的代码中进行一些有成效的编辑,我会很高兴的

    只需在JS库中添加该类并调用:

    var myTestXML = new myExcelXML(myJsonArray);
    myTestXML.downLoad();
    
    我的myExcelXML类:

    let myExcelXML = (function() {
        let Workbook, WorkbookStart = '<?xml version="1.0"?><ss:Workbook  xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40">';
        const WorkbookEnd = '</ss:Workbook>';
        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, '&amp;');
            }
    
            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 = '<ss:Styles><ss:Style ss:ID="' + id + '"><ss:Font ss:Bold="1"/></ss:Style></ss:Styles>';
    
            return Styles;
        }
    
        const myXMLWorkSheet = function(name, o) {
            const Table = myXMLTable(o);
            let WorksheetStart = '<ss:Worksheet ss:Name="' + name + '">';
            const WorksheetEnd = '</ss:Worksheet>';
    
            return WorksheetStart + Table + WorksheetEnd;
        }
    
        const myXMLTable = function(o) {
            let TableStart = '<ss:Table>';
            const TableEnd = '</ss:Table>';
    
            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 '<ss:Column ss:AutoFitWidth="0" ss:Width="' + w + '"/>';
        }
    
    
        const myXMLHead = function(id, h) {
            let HeadStart = '<ss:Row ss:StyleID="' + id + '">';
            const HeadEnd = '</ss:Row>';
    
            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 = '<ss:Row>';
            const RowEnd = '</ss:Row>';
            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 = '<ss:Cell>';
            const CellEnd = '</ss:Cell>';
    
            const Data = myXMLData(n);
            CellStart += Data;
    
            return CellStart + CellEnd;
        }
    
        const myXMLData = function(d) {
            let DataStart = '<ss:Data ss:Type="String">';
            const DataEnd = '</ss:Data>';
    
            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;
    })();
    
    让myExcelXML=(函数(){
    让工作簿、工作簿开始=“”;
    const WorkbookEnd='';
    设fs,SheetName='SHEET 1',
    styleID=1,columnWidth=80,
    fileName=“Employee_List”,uri,链接;
    类myExcelXML{
    建造师(o){
    让respArray=JSON.parse(o);
    设finalDataArray=[];
    for(设i=0;i0){
    const columnHeader=Object.keys(tableData[0]);
    让行数据;
    for(设i=0;ilet myExcelXML = (function() {
        let Workbook, WorkbookStart = '<?xml version="1.0"?><ss:Workbook  xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40">';
        const WorkbookEnd = '</ss:Workbook>';
        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, '&amp;');
            }
    
            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 = '<ss:Styles><ss:Style ss:ID="' + id + '"><ss:Font ss:Bold="1"/></ss:Style></ss:Styles>';
    
            return Styles;
        }
    
        const myXMLWorkSheet = function(name, o) {
            const Table = myXMLTable(o);
            let WorksheetStart = '<ss:Worksheet ss:Name="' + name + '">';
            const WorksheetEnd = '</ss:Worksheet>';
    
            return WorksheetStart + Table + WorksheetEnd;
        }
    
        const myXMLTable = function(o) {
            let TableStart = '<ss:Table>';
            const TableEnd = '</ss:Table>';
    
            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 '<ss:Column ss:AutoFitWidth="0" ss:Width="' + w + '"/>';
        }
    
    
        const myXMLHead = function(id, h) {
            let HeadStart = '<ss:Row ss:StyleID="' + id + '">';
            const HeadEnd = '</ss:Row>';
    
            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 = '<ss:Row>';
            const RowEnd = '</ss:Row>';
            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 = '<ss:Cell>';
            const CellEnd = '</ss:Cell>';
    
            const Data = myXMLData(n);
            CellStart += Data;
    
            return CellStart + CellEnd;
        }
    
        const myXMLData = function(d) {
            let DataStart = '<ss:Data ss:Type="String">';
            const DataEnd = '</ss:Data>';
    
            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;
    })();
    
    const xl = require('excel4node');
    const express = require('express');
    const app = express();
    
    var json = [{"Vehicle":"BMW","Date":"30, Jul 2013 09:24 AM","Location":"Hauz Khas, Enclave, New Delhi, Delhi, India","Speed":42},{"Vehicle":"Honda CBR","Date":"30, Jul 2013 12:00 AM","Location":"Military Road,  West Bengal 734013,  India","Speed":0},{"Vehicle":"Supra","Date":"30, Jul 2013 07:53 AM","Location":"Sec-45, St. Angel's School, Gurgaon, Haryana, India","Speed":58},{"Vehicle":"Land Cruiser","Date":"30, Jul 2013 09:35 AM","Location":"DLF Phase I, Marble Market, Gurgaon, Haryana, India","Speed":83},{"Vehicle":"Suzuki Swift","Date":"30, Jul 2013 12:02 AM","Location":"Behind Central Bank RO, Ram Krishna Rd by-lane, Siliguri, West Bengal, India","Speed":0},{"Vehicle":"Honda Civic","Date":"30, Jul 2013 12:00 AM","Location":"Behind Central Bank RO, Ram Krishna Rd by-lane, Siliguri, West Bengal, India","Speed":0},{"Vehicle":"Honda Accord","Date":"30, Jul 2013 11:05 AM","Location":"DLF Phase IV, Super Mart 1, Gurgaon, Haryana, India","Speed":71}]
    
    const createSheet = () => {
    
      return new Promise(resolve => {
    
    // setup workbook and sheet
    var wb = new xl.Workbook();
    
    var ws = wb.addWorksheet('Sheet');
    
    // Add a title row
    
    ws.cell(1, 1)
      .string('Vehicle')
    
    ws.cell(1, 2)
      .string('Date')
    
    ws.cell(1, 3)
      .string('Location')
    
    ws.cell(1, 4)
      .string('Speed')
    
    // add data from json
    
    for (let i = 0; i < json.length; i++) {
    
      let row = i + 2
    
      ws.cell(row, 1)
        .string(json[i].Vehicle)
    
      ws.cell(row, 2)
        .date(json[i].Date)
    
      ws.cell(row, 3)
        .string(json[i].Location)
    
      ws.cell(row, 4)
        .number(json[i].Speed)
    }
    
    resolve( wb )
    
      })
    }
    
    app.get('/excel', function (req, res) {
    
      createSheet().then( file => {
    file.write('ExcelFile.xlsx', res);
      })
    
    });
    
    app.listen(3040, function () {
      console.log('Excel app listening on port 3040');
    });
    
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.13.1/xlsx.full.min.js"></script> 
    <script>
        function ExportData()
        {
                filename='reports.xlsx';
           data=[{Market: "IN", New Arrivals: "6", Upcoming Appointments: "2", Pending - 1st Attempt: "4"},
                {Market: "KS/MO", New Arrivals: "4", Upcoming Appointments: "4", Pending - 1st Attempt: "2"},
                {Market: "KS/MO", New Arrivals: "4", Upcoming Appointments: "4", Pending - 1st Attempt: "2"},
                {Market: "KS/MO", New Arrivals: "4", Upcoming Appointments: "4", Pending - 1st Attempt: "2"}]
            var ws = XLSX.utils.json_to_sheet(data);
            var wb = XLSX.utils.book_new();
            XLSX.utils.book_append_sheet(wb, ws, "People");
            XLSX.writeFile(wb,filename);
         }
    </script>