cmill
cmill

Reputation: 891

Google visualization export DataView to Excel

I’m seeking advice on best practice for providing the user a click button to export a DataView behind chart/table into Excel.

I looked into the Toolbar functionality but found this does not work because the DataView is “hand-populated“ and not a URL required by the API. (Please correct me if I’m mistaken in my understanding.)

I prefer to follow/use methods which are common in the field.

Suggestions?

Upvotes: 1

Views: 2105

Answers (1)

cmill
cmill

Reputation: 891

This is how I solved it for anyone interested.

HTML:

<div id="div_table"></div>
<a id="exportCSV" href="">Excel</a>

My table object is a .ChartWrapper so I can use the .getDataTable() method later.

var table = new google.visualization.ChartWrapper({
    chartType: 'Table',
    containerId: 'div_table',
    options: {allowHtml: true}
});

JavaScript - Google visualization event listener

document.getElementById("exportCSV").addEventListener("click", function () {
    var csvData = table.getDataTable(); //google visualization DataTable to download
    export_CSV("exportCSV", csvData);
});

Javascript - function source material https://stackoverflow.com/a/42956427/7763687

function export_CSV(elementID, data) {

    var csvColumns;
    var csvContent;
    var downloadLink;

    // build column headings
    csvColumns = '';
    for (var i = 0; i < data.getNumberOfColumns(); i++) {
        csvColumns += data.getColumnLabel(i);
        if (i < data.getNumberOfColumns() - 1) {
            csvColumns += ',';
        }
    }
    csvColumns += '\n';

    // get data rows
    csvContent = csvColumns + google.visualization.dataTableToCsv(data);

    //New Download Link - works in chrome and mozilla
    downloadLink = document.getElementById(elementID);
    downloadLink.href = 'data:text/csv;charset=utf-8,' + encodeURI(csvContent);
    downloadLink.download = 'data.csv';
    downloadLink.target = '_blank';
}

This worked ok for my application. Cheers!

Upvotes: 2

Related Questions