angularjs 엑셀 다운로드

2020年2月8日

공장: app.factory(`엑셀`,함수($window){var uri=`data:app/vnd.ms-excel;base64,`, 템플릿=`tableToExcel: 함수(tableId, 워크시트이름) { var 테이블 = document.getElementById(tableId); var ctx = { 워크시트이름, 표: table.innerHTML }; var href = uri + base64 (형식 (템플릿, ctx)); 반환 href; } $scope.exportToExcel = 함수 (테이블 Id) { var exportHref =Excel.tableToExcel (테이블 Id, `시트 이름`); $timeout (함수(함수){위치=exportHref;},100); 트리거 다운로드 }; 참조 오류: 엑셀은 k.$scope.exportToExcel (PhoneNotFoundCtrl.js:32)에서 각.js:10847에서 k.$eval (각도.js:12702) k.$apply (각.js:12800)에서 정의되지 않습니다. (angular.js:19141) HTMLButtonElement.m.event.dispatch (jquery-1.11.1.min.js:3) htmlButtonElement.r.handle (jquery-1.11.1.min.js:3) 당신은 단지 한 가지 작업을 수행 해야합니다. js를 포함하여 파일을 로컬로 저장합니다. “https://github.com/eligrey/FileSaver.js/”에서 다운로드하여 응답 데이터가 Blob 유형이어야합니다. 앱 구성 요소에 이 것을 가져오고 삽입하고 내보내기 단추를 클릭할 때마다 exportExcel 메서드를 호출해 보겠습니다. 실제로 ngOnInit 수명 주기 메서드에서 로드시 고객 어레이에 데이터를 채우고 있습니다. 사용자 정의 파일 이름으로 다운로드 하는 코드 파이어 폭스에서 작동 하지 않는 경우, tableToExcel에서 다른 부분을 변경: // 공장 MyApp.factory (`엑셀`, [“$window”, 함수 ($window) { var uri = `데이터:응용 프로그램/vnd.ms-excel;base64,`, 템플릿 = `<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:xmlns:schemas-microsoft-com:excel" xmlns="http://www.w3.org/TR/REC-html40"< 메타 http-equiv=”콘텐츠-유형”=”콘텐츠-유형”=”콘텐츠-유형” <x:ExcelWorkbook<<x:ExcelWorksheets<{워크시트}</x:이름<<x:워크시트옵션<x:디스플레이그리드라인/</x:워크시트옵션 x:ExcelWorksheet</x:ExcelWorksheets</[끝:—- —-

{테이블}
{테이블}

`, base64 = 함수(들) { 반환 $window.btoa(unescape(encodeURIComponent(들)); }, 형식 = 함수(들, c) { 반환 s.replace(/{(w+)}/g, 함수(m, p) { 반환 c[p]; }) }; 반환 { tableToExcel : 기능 (tableId, 워크 시트이름, isBase64) { var 테이블 = document.querySelector (tableId); var ctx = { 워크 시트 : 워크 시트 이름, 테이블 .innerHTML }; var href = “”; 만약 (isBase64) { href = uri + base64 (형식(템플릿, ctx)); } {href = uri + format(템플릿, ctx); } 반환 href; } }; }]); 컨트롤러 MyApp.controller(`마이 컨트롤러`, [“$scope”, “$timeout”, “엑셀”, 기능 ($scope, $timeout, 엑셀) { {$scope.exportToExcel = 기능 (tableId) { var 브라우저 = var useBlobBuilder = false; // IE, 에지 경우 (브라우저.indexof(`Trident`) !==1 & 브라우저.indexof(`rv:11`) (browser.indexOf(`MSIE 10`) !==-1) || (문서.문서모드 || /Edge/.test(브라우저))) { useBlobBuilder = true; $scope.exportHref = Excel.tableToExcel(테이블Id, `시트 이름`, false); } else { //FF, 크롬 useBlobBuilder = 거짓; $scope.exportHref = Excel.tableToExcel (tableId, `시트 이름`, true); } $timeout (함수) { var 파일 이름 = “test.xls”; 만약 (useBlobBuilder) { // IE, Edge var 빌더 = 새 창. MSBlobBuilder (); builder.append($scope.exportHref); var Blob = builder.getBlob(`데이터:응용 프로그램/vnd.ms-excel`); window.navigator.msSaveOrOpenBlob (blob, 파일 이름); } 다른 { / / FF, 크롬 바 링크 = document.createElement (`a`); link.download = 파일 이름; link.href = $scope.exportHref; 만약 (document.body!= null) { document.body.appendChild (링크); } link.click (; } } } } } } }]); 자바 스크립트 라이브러리 Excel 빌더를 사용하여 엑셀을 작성할 때 비슷한 문제가 발생했습니다. 결국, 그 이유는 컨트롤 문자 `u001a`가 데이터에 포함되어 있다는 것을 발견했습니다.

コメント