Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Export HTML table to Excel but select a name for the file

Tags:

jquery

excel

I'm using this function

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) {
    if (!table.nodeType) table = document.getElementById(table)
    var ctx = {worksheet: name || 'Worksheet', table: table.innerHTML}
    window.location.href = uri + base64(format(template, ctx))
 }
})()

Here is the example:

http://jsfiddle.net/insin/cmewv/

In that example, they change the name of the worksheet, but is there any way to change the name of the file?

like image 431
GalloPinto Avatar asked Jan 02 '13 16:01

GalloPinto


2 Answers

See the answers at: Is there any way to specify a suggested filename when using data: URI?

Basically, there's no way to do this with JavaScript. If the file is being downloaded with an <a> link, you can specify a filename using the download attribute, but this is not widely supported (right now just Chrome and BB10).

like image 107
newtron Avatar answered Sep 28 '22 02:09

newtron


This works for me :

 $scope.exportData = (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) {
                if (!table.nodeType) table = document.getElementById(table)
                var ctx = {worksheet: name || 'Worksheet', table: table.innerHTML}
                //window.location.href = uri + base64(format(template, ctx))
                var link = document.createElement("a");
                    link.download = "filename.xls";
                    link.href = uri + base64(format(template, ctx));
                    link.click();
              }
            })()
like image 25
Amay Kulkarni Avatar answered Sep 28 '22 02:09

Amay Kulkarni