Экспорт данных в формате CSV, Excel, PDF в AngularJS
Я хочу добавить данные таблицы экспорта в функции CSV, Excel, PDF в моем приложении.
Я создаю приложение, используя angularjs 1.2.16.
Экспорт данных в Excel
Я использовал
<script src="https://rawgithub.com/eligrey/FileSaver.js/master/FileSaver.js" type="text/javascript"></script>
чтобы экспортировать таблицу в формат XLS, используя следующий код:
var blob = new Blob([document.getElementById('exportable').innerHTML], {
type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8"
});
saveAs(blob, "report.xls");
выше код работает нормально.
Экспорт данных в CSV, PDF
Точно так же я хочу экспортировать данные в формате CSV и PDF.
Я использовал http://www.directiv.es/ng-csv для экспорта данных в CSV, но он не работает нормально в офисе Ubuntu libre (файл показывает поврежденные данные).
Может ли кто-нибудь сказать мне, как экспортировать данные таблицы в формате CSV, Excel и PDF в angularjs?
Ответы
Ответ 1
Вы можете экспортировать данные из AngularJS в форматы XLS, XLSX, CSV и TAB с помощью Alasql Библиотека JavaScript с XLSX.js.
Включите в код две библиотеки:
Чтобы экспортировать данные в формат Excel, создайте функцию в коде контроллера:
function myCtrl($scope) {
$scope.exportData = function () {
alasql('SELECT * INTO XLSX("mydata.xlsx",{headers:true}) FROM ?',[$scope.items]);
};
$scope.items = [{a:1,b:10},{a:2,b:20},{a:3,b:30}];
};
Затем создайте кнопку (или любую другую ссылку) в HTML:
<div ng-controller="myCtrl">
<button ng-click="exportData()">Export</button>
</div>
Попробуйте этот пример в jsFiddle.
Чтобы сохранить данные в формате CSV, используйте функцию CSV():
alasql("SELECT * INTO CSV('mydata.csv', {headers:true}) FROM ?",[$scope.mydata]);
Или используйте функции TXT(), CSV(), TAB(), XLS(), XLSX() для правильных форматов файлов.
Ответ 2
Если вы довольны CSV файлом, то модуль ngCsv - это путь. Вы не загружаете элементы из DOM, а экспортируете массив напрямую. Здесь вы можете увидеть пример действия ngCsv.
html:
<h2>Export {{sample}}</h2>
<div>
<button type="button" ng-csv="getArray" filename="test.csv">Export</button>
</div>
и js:
angular.module('csv', ['ngCsv']);
function Main($scope) {
$scope.sample = "Sample";
$scope.getArray = [{a: 1, b:2}, {a:3, b:4}];
}
Ответ 3
SAVEAS; Чтобы изменить зарегистрированное расширение файла, например: "f:\folder\report.html"?
var blob = new Blob([document.getElementById('exportable').innerHTML], {
type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8" });
saveAs(blob, "report.xls");
Ответ 4
Я проработал несколько подходов и заключил следующее, typafe (DefinitelyTyped):
exportAsExcel(tableId: string, fileName: string, linkElement: any) {
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(decodeURI(encodeURIComponent(s)));
},
format = function (s, c) {
return s.replace(/{(\w+)}/g, function (m, p) {
return c[p];
});
};
// get the table data
var table = document.getElementById(tableId);
var ctx = {
worksheet: fileName,
table: table.innerHTML
};
// if browser is IE then save the file as blob, tested on IE10 and IE11
var browser = window.navigator.appVersion;
if ((browser.indexOf('Trident') !== -1 && browser.indexOf('rv:11') !== -1) ||
(browser.indexOf('MSIE 10') !== -1)) {
var builder = new MSBlobBuilder();
builder.append(uri + format(template, ctx));
var blob = builder.getBlob('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
window.navigator.msSaveBlob(blob, fileName + '.xlsx');
} else {
var element = document.getElementById(linkElement);
var a = document.createElement('a');
a.href = uri + base64(format(template, ctx));
a.target = '_blank';
a.setAttribute('download', fileName + '.xlsx');
document.body.appendChild(a);
a.click();
}
toastr.success("Awesome!", "We've created an Excel report for you and you should get it as a download in your browser.");
}
Престижность идет к тем, кто внес свой вклад в различные статьи.
Ответ 5
мы можем экспортировать данные из таблицы в различный формат, включая
Json, Xml, Pdf.....
Подробное описание вы можете найти http://www.prathapkudupublog.com/2015/10/angular-export-to-table.html
Примечание. Эта реализация не будет работать в IE
Что вам нужно?
Angularjs
jquery.js
Файлы, указанные ниже
tableExport.js, JqueryBase64.js, html2canvas.js, base64.js, Jspdf.js, sprintf.js
<script type="text/javascript">
var myAppModule = angular.module('myApp', []);
myAppModule.controller('myCtrl', function ($scope) {
$scope.exportData = function () {
$('#customers').tableExport({ type: 'json', escape: 'false' });
};
$scope.items = [
{
"FirstName": "Prathap",
"LastName": "Kudupu",
"Address": "Near Anjana Beach"
},
{
"FirstName": "Deepak",
"LastName": "Dsouza",
"Address": "Near Nariman Point"
}
];
});