2015-12-12 5 views
1

У меня есть объект JSON, возвращаемый службой. Я хочу экспортировать это в файл xls или excel одним нажатием кнопки.Экспорт JSON в Excel с использованием EmberJS

Когда я делаю услугу, получают вызвать возвращение сервера с этим:

"objects": [ 
{ 
    "amount": 1000, 
    "date": "2015-12-08", 
    "description": "sdadas", 
    "from_id": "Prateek", 
    "id": 1, 
    "to_id": "Prateek,Srabani,Jimmy" 
}, 
{ 
    "amount": 132, 
    "date": "2015-12-08", 
    "description": "sdadas", 
    "from_id": "Prateek", 
    "id": 3, 
    "to_id": "Jimmy" 
}, 
{ 
    "amount": 3000, 
    "date": "2015-12-08", 
    "description": "asdsasa", 
    "from_id": "Srabani", 
    "id": 4, 
    "to_id": "Prateek,Srabani,Jimmy" 
}, 
{ 
    "amount": 2000, 
    "date": "2015-12-08", 
    "description": "asdsasa", 
    "from_id": "Jimmy", 
    "id": 5, 
    "to_id": "Prateek,Srabani,Jimmy" 
}, 
{ 
    "amount": 100, 
    "date": "2015-12-08", 
    "description": "adas", 
    "from_id": "Srabani", 
    "id": 6, 
    "to_id": "Prateek" 
} 
] 

Помимо этого нет фильтрации сделано вообще в передней части. Я должен экспортировать этот массив объектов, чтобы преуспеть с ключами, являющимися меткой столбцов, и значениями, являющимися соответствующими строками.

Может ли кто-нибудь помочь мне с рулями, а также с кодом контроллера?

+3

Вопрос на самом деле слишком широк в это время. Должен быть отредактирован, чтобы показать код, который вы попытались, и сузить вопрос до более конкретной проблемы. – paisanco

+0

Является ли объект JSON экспортироваться как-то фильтрованным или измененным в браузере? Если он экспортируется, так как вы можете захотеть создать файл на сервере вместо предложенного вами подхода. –

+0

@OrenHizkiya Редактировать вопрос. Теперь это имеет смысл? –

ответ

2

Это код для экспорта объекта JSON в формат, поддерживаемый Excel. Работает хорошо.

$(document).ready(function(){ 
    $('button').click(function(){ 
     var data = $('#txt').val(); 
     if(data == '') 
      return; 

    JSONToCSVConvertor(data, "Vehicle Report", true); 
}); 
}); 

function JSONToCSVConvertor(JSONData, ReportTitle, ShowLabel) { 
//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 CSV = '';  
    //Set Report title in first row or line 

    CSV += 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 comma-seprated 
     row += index + ','; 
    } 

    row = row.slice(0, -1); 

    //append Label row with line break 
    CSV += 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 comma-seprated 
    for (var index in arrData[i]) { 
     row += '"' + arrData[i][index] + '",'; 
    } 

    row.slice(0, row.length - 1); 

    //add a line break after each row 
    CSV += row + '\r\n'; 
    } 

    if (CSV == '') {   
     alert("Invalid data"); 
     return; 
    } 

    //Generate a file name 
    var fileName = "MyReport_"; 
    //this will remove the blank-spaces from the title and replace it with an underscore 
    fileName += ReportTitle.replace(/ /g,"_"); 

    //Initialize file format you want csv or xls 
    var uri = 'data:text/csv;charset=utf-8,' + escape(CSV); 

    // Now the little tricky part. 
    // you can use either>> window.open(uri); 
    // but this will not work in some browsers 
    // or you will not get the correct file extension  

    //this trick will generate a temp <a /> tag 
    var link = document.createElement("a");  
    link.href = uri; 

    //set the visibility hidden so it will not effect on your web-layout 
    link.style = "visibility:hidden"; 
    link.download = fileName + ".csv"; 

    //this part will append the anchor tag and remove it after automatic click 
    document.body.appendChild(link); 
    link.click(); 
    document.body.removeChild(link); 
    }