2017-09-21 8 views
0

여기에서 노드 프로그램을 호출하고 MYSQL에서 데이터를 가져오고 excel에서 내보내기를 클릭합니다.Angular excel export

$scope.exportToExcel=function(){  
    $http.get("/getDetails").then(function(response){ 
      console.log(response.data) 
      $scope.details = response.data[1].data; // here you will get data 
    },function(res){ 
      console.log("Error",res) //error occured 
    }); 


     $scope.exportToExcel=function(tableId){ // ex: '#my-table' 
      var exportHref=Excel.tableToExcel(tableId,'WireWorkbenchDataExport'); 
      $timeout(function(){location.href=exportHref;},100); // trigger download 
     } 

var myApp=angular.module('myApp',[]); 
myApp.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; 
      } 
     }; 
    }) 
} 

오류 :

TypeError: Cannot read property 'tableToExcel' of undefined 

가 같은과 함께 도와주세요.

편집 : 1

코드 편집에서
app.controller('myctrl', ['$scope','$http','$timeout','Excel', function($http,$timeout,Excel) { 

$scope.exportToExcel=function(tableId){ 
$http.get("/getNodeService").then(function(response){ 
     console.log(response.data) 
     $scope.details = response.data[1].data; 

var exportHref=Excel.tableToExcel(tableId,'WireWorkbenchDataExport',$scope.details); 
      $timeout(function(){location.href=exportHref;},10000); 
}); 
}; 

}]); 

app.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,details){ 
console.log(details); 
       var table=$(tableId), 
        ctx={worksheet:worksheetName,table:table.html()}, 
        href=uri+base64(format(template,ctx)); 
       return href; 
      } 
     }; 
    }); 

, 난 헤더 엑셀 다운로드 할 수 있어요하지만 내 MySQL의 데이터가 난 내 코드를 변경해야 할 무엇, 그에 오지 않아 난 할 수 있도록 내 데이터로 다운로드하십시오. 도와주세요.

해결 편집 2 :

$scope.exportToExcel=function(tableId){ 
$http.get('/getDetails').then(function(response){ 
     console.log(response.data) 
     $scope.details = response.data[1].data; // here you will get data 

var exportHref=Excel.tableToExcel(tableId,"worksheetName",$scope.details); 
      $timeout(function(){location.href=exportHref;},100); 
}); 
}; 

}]); 
app.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,details){ 

       var table=$(tableId), 
        ctx={worksheet:worksheetName || 'Worksheet',table:table.html()}, 
        href=uri+base64(format(template,ctx)); 
       return href; 

      } 
     }; 
    }); 

답변

0
myApp.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; 
     } 
    }; 
}).controller('MyCtrl', function(Excel, $timeout) { 
    $scope.exportToExcel = function(tableId) { // ex: '#my-table' 
     var exportHref = Excel.tableToExcel(tableId, 'sheet name'); 
     $timeout(function() { 
      location.href = exportHref; 
     }, 100); // trigger download 
    } 
}); 
+0

당신이 당신의 코드를 훨씬 더 잘 보여주기 위해 편집기에서 코드 샘플 옵션을 사용할 수 있습니다. –

+0

나는이 줄을 .controller ('MyCtrl', function (Excel, $ timeout))라고 말하고 싶습니다. 메신저가 위쪽에서 사용하고 있기 때문에 function..please help im이 매우 새롭습니다. –

+0

exportToExcel() 함수를에서 사용하십시오. 기존 컨트롤러와 엑셀을 삽입했는지 확인하고, 컨트롤러와 엑셀 라이브러리에 $ timeout을 넣었다. – Gaurav