0

I have servlet URL that provides the content in "application/vnd.ms-excel" format on clicking export button.Here my doubt is, i already getting the content from servr in "application/vnd.ms-excel" format, how to map that server response to workbook template?

Referred the below stackoveflow link which explains about download HTML table as XLSX file.

HTML Table to Excel Javascript

HTML table to XLSX:-

var tableToExcel = (function () {
    var uri = 'data:application/vnd.ms-excel;base64,'
    , template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><table>{table}</table></body></html>'
    , base64 = function (s) { return window.btoa(unescape(encodeURIComponent(s))) }
    , format = function (s, c) { return s.replace(/{(\w+)}/g, function (m, p) { return c[p]; }) }
    return function (table, name, filename) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = { worksheet: name || 'Worksheet', table: table.innerHTML }

        document.getElementById("dlink").href = uri + base64(format(template, ctx));
        document.getElementById("dlink").download = filename;
        document.getElementById("dlink").click();

    }
})()

I hope that the question is clear, thanks for your help in advance.

Community
  • 1
  • 1

1 Answers1

0

" how to map that server response to workbook template"

You don't the browser will do it for you. Depending on you browser and it's configuration will download the file or show a pop up asking if needs to be saved or opened.

Look at Extjs 4 downloading a file through ajax call

you need to set

standardSubmit: true

something like this:

var form = Ext.create('Ext.form.Panel', { // this wolud be your form 
            standardSubmit: true,         // this is the important part 
            url: '../GenerateFileServlet' 
        });

        form.submit({
            params: {
                fileName: myFile
            }
        });

NOTICE that I am doing a form submit and not an Ajax Request.

Community
  • 1
  • 1
code4jhon
  • 5,725
  • 9
  • 40
  • 60