создать .xlsx с пользовательским js в обратном вызове bokeh - PullRequest
0 голосов
/ 24 апреля 2020

Есть ли возможность создать файл .xlsx с пользовательским js обратным вызовом в приложении bokeh для загрузки?

Пробовал следующее, но это не работает:

callback = CustomJS(code="""
var wb = XLSX.utils.book_new();
wb.SheetNames.push("Test Sheet");
var ws_data = [['hello' , 'world']];
var ws = XLSX.utils.aoa_to_sheet(ws_data);
wb.Sheets["Test Sheet"] = ws;
var wbout = XLSX.write(wb, {bookType:'xlsx',  type: 'binary'});

function s2ab(s) { 
                var buf = new ArrayBuffer(s.length); //convert s to arrayBuffer
                var view = new Uint8Array(buf);  //create uint8array as viewer
                for (var i=0; i<s.length; i++) view[i] = s.charCodeAt(i) & 0xFF; //convert to octet
                return buf;    
}

var filename = 'data.xlsx';
var blob = new Blob([s2ab(wbout)], { type:"application/octet-stream" });


if (navigator.msSaveBlob) {
    navigator.msSaveBlob(blob, filename);
}
else {
    var link = document.createElement("a");
    link = document.createElement('a')
    link.href = URL.createObjectURL(blob);
    link.download = filename
    link.target = "_blank";
    link.style.visibility = 'hidden';
    link.dispatchEvent(new MouseEvent('click'))
}

""")    
...