(function() {
'use strict';
angular.module('ngJsonExportExcel', [])
.directive('ngJsonExportExcel', function() {
return {
restrict: 'AE',
scope: {
data : '=',
filename: '=?',
reportFields: '=',
separator: '@'
},
link: function (scope, element) {
scope.filename = !!scope.filename ? scope.filename : 'SalesReport';
var fields = [];
var header = [];
var separator = scope.separator || ',';
angular.forEach(scope.reportFields, function(field, key) {
if(!field || !key) {
throw new Error('error json report fields');
}
fields.push(key);
header.push(field);
});
element.bind('click', function() {
var bodyData = _bodyData();
var strData = _convertToExcel(bodyData);
var blob = new Blob([strData], {type: "text/plain;charset=utf-8"});
return saveAs(blob, [scope.filename + '.csv']);
});
function _bodyData() {
var data = scope.data;
var body = "";
angular.forEach(data, function(dataItem) {
var rowItems = [];
angular.forEach(fields, function(field) {
if(field.indexOf('.')) {
field = field.split(".");
var curItem = dataItem;
// deep access to obect property
angular.forEach(field, function(prop){
if (curItem !== null && curItem !== undefined) {
curItem = curItem[prop];
}
});
data = curItem;
}
else {
data = dataItem[field];
}
var fieldValue = data !== null ? data : ' ';
if (fieldValue !== undefined && angular.isObject(fieldValue)) {
fieldValue = _objectToString(fieldValue);
}
if(typeof fieldValue == 'string') {
rowItems.push('"' + fieldValue.replace(/"/g, '""') + '"');
} else {
rowItems.push(fieldValue);
}
});
body += rowItems.join(separator) + '\n';
});
return body;
}
function _convertToExcel(body) {
return header.join(separator) + '\n' + body;
}
function _objectToString(object) {
var output = '';
angular.forEach(object, function(value, key) {
output += key + ':' + value + ' ';
});
return '"' + output + '"';
}
}
};
});
})();
Bạn có muốn sử dụng plugin không? – WorkWe
https://medium.com/@darilldrems/angularjs-export-html-table-to-pdf-excel-or-doc-formats-bb741d06dfec#.ll3d5jtlc điều này có thể là những gì bạn đang tìm kiếm. Nếu không, bạn có thể sned dữ liệu thông qua một yêu cầu đến một cái gì đó như php và xử lý nó ở đó. – SeRu