1

I have a problem in export to Excel.

view

<a ng-href="#">
<i class="fa fa-file-excel-o" ng-click="export_excel()"> Export to Excel</i> </a>

   <table class="table table-striped table-bordered table-hover table-checkable order-column" id="sample_1">
                <thead>
                    <tr>   
                        <th>Sl No</th>
                        <th>Scope of Work</th>
                        <th>Description</th>

                    </tr>
                </thead>
                <tbody>
                    <tr class="odd gradeX" ng-repeat="scpdata in scopeData"> 
                        <td>{{$index + 1}}</td>
                        <td>{{scpdata.scope_of_work}}</td>
                        <td>{{scpdata.ss_description}}</td> 
                    </tr>

                </tbody>
            </table>

js controller

  $scope.export_excel = (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))
        }
    })() 

I'm new in Angular.

I refer to this question here.

3
  • What exactly is the problem? Commented Aug 17, 2016 at 6:41
  • Are you really sure generating excel file on client is the way to go? Usually such tasks performed on the server side (just saying) Commented Aug 17, 2016 at 6:42
  • i started this based on the above link.Now i got this error: angular.js:12477 TypeError: Cannot read property 'nodeType' of undefined Commented Aug 17, 2016 at 6:44

1 Answer 1

2

Use Following Code

modulename.factory('Excel', function ($window) {
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 {
    tableToExcel: function (tableId, worksheetName) {
        var table = $(tableId),
            ctx = { worksheet: worksheetName, table: table.html() },
            href = uri + base64(format(template, ctx));
        return href;
    }
};})

And in Controller

 $scope.exportToExcel = function (tableId) {  // ex: '#my-table'   
   var exportHref = Excel.tableToExcel(tableId, 'sheetname');
   $timeout(function () { location.href = exportHref; }, 100);    }
Sign up to request clarification or add additional context in comments.

8 Comments

hi.i want to ask u..u there
Hi what do you want ask?
$scope.exportToExcel = function ('#sample_1') ..An error line under this
use this in button action like <input ng-click="exportToExcel('#tblcenter_Per_emp')" > donot write in controller function
In console show this ReferenceError: Excel is not defined
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.