All Apps and Add-ons

Can I use the Excel Export button with my Django app?

Path Finder

I want to use Excel Export Button with Web Framework (Django).
I tried to use Excel Export app, but this is only with Simple XML module.
Can I use Excel Export Button with my Django app ?

Path Finder

Hi,

Since this question was made 1yr ago and there is no answer yet, I will let you know my work-around... Just in case it can help others with our same problem (and don't want to use TableElement module and want to keep using the TableView from SplunkJS).

  1. Create your SearchManager
  2. Create the TableView with managerid equal to the id of the SearchManager at 1).
  3. Define a function to convert splunk results to csv:

    function arrayToCSVConvertor(arrData, ReportTitle, ShowLabel) {
    //If JSONData is not an object then JSON.parse will parse the JSON string in an Object

    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]) {
            if ((index.indexOf("_") == 0 && index.indexOf("_time") != 0) || index.length == 0){
    
            } else {
            //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
        $.each(arrData[i], function (k,v){
            if ((k.indexOf("_") == 0 && k.indexOf("_time") != 0) || v.length == 0){
                //nada
            }else{
                row += v + ","
            }
        })
        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 = "";
    //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);
    

    }

  4. Create a trigger to call the function at 3):

    search.on("search:done", function(state, job) {
    if (state.content.resultCount != 0) {
    var results = search.data('results', {
    output_mode: 'json',
    count: 0
    });

    results .on("data", function() {
      results_data = results.data()['results'];
      arrayToCSVConvertor(results_data,"title1.csv",true);
    });
    

    }
    });

This work-around creates and automatic export once the search has finished. Of course, create a function that gets called when a button is clicked if you want to create the export only under the users demand.

I hope this helps. And if someone finds a better way to solve this question please post it! 🙂

Cheers,

Kike

0 Karma