is there a way to save bokeh data table content

后端 未结 3 722
闹比i
闹比i 2020-12-16 18:53

I am experimenting with bokeh data table to display data embedded in web page. It works quite nicely.

Is there a way to save the table content from the displayed da

3条回答
  •  星月不相逢
    2020-12-16 19:33

    For those who have trouble adjusting or finding the example on the bokeh website or are just very lazy, the below code does the minimal job:

    from bokeh.models import ColumnDataSource, CustomJS
    from bokeh.models.widgets import Button
    from bokeh.io import show
    
    source = ColumnDataSource({'list1':[0,1,2,3],'list2':[4,5,6,7]})
    button = Button(label="Download", button_type="success")
    
    javaScript="""
    function table_to_csv(source) {
        const columns = Object.keys(source.data)
        const nrows = source.get_length()
        const lines = [columns.join(',')]
    
        for (let i = 0; i < nrows; i++) {
            let row = [];
            for (let j = 0; j < columns.length; j++) {
                const column = columns[j]
                row.push(source.data[column][i].toString())
            }
            lines.push(row.join(','))
        }
        return lines.join('\\n').concat('\\n')
    }
    
    
    const filename = 'data_result.csv'
    filetext = table_to_csv(source)
    const blob = new Blob([filetext], { type: 'text/csv;charset=utf-8;' })
    
    //addresses IE
    if (navigator.msSaveBlob) {
        navigator.msSaveBlob(blob, filename)
    } else {
        const link = document.createElement('a')
        link.href = URL.createObjectURL(blob)
        link.download = filename
        link.target = '_blank'
        link.style.visibility = 'hidden'
        link.dispatchEvent(new MouseEvent('click'))
    }
    """
    
    button.callback = CustomJS(args=dict(source=source),code=javaScript)
    show(button)
    

提交回复
热议问题