On opening the excel file whcih is export in .xlsm format file getting the above below error
Please look at the below code in controller on write the excel file
Angular Controller Function using js-xls plugin. Used two plugin named js-xls and filesaver.js for saveAs blob function
$scope.exportData = function(){
function Workbook() {
if(!(this instanceof Workbook)) return new Workbook();
this.SheetNames = [];
this.Sheets = {};
}
function sheet_from_array_of_arrays(data, opts) {
var ws = {};
var range = {s: {c:10000000, r:10000000}, e: {c:0, r:0 }};
for(var R = 0; R != data.length; ++R) {
for(var C = 0; C != data[R].length; ++C) {
if(range.s.r > R) range.s.r = R;
if(range.s.c > C) range.s.c = C;
if(range.e.r < R) range.e.r = R;
if(range.e.c < C) range.e.c = C;
var cell = {v: data[R][C] };
if(cell.v == null) continue;
var cell_ref = XLSX.utils.encode_cell({c:C,r:R});
/* TEST: proper cell types and value handling */
if(typeof cell.v === 'number') cell.t = 'n';
else if(typeof cell.v === 'boolean') cell.t = 'b';
else if(cell.v instanceof Date) {
cell.t = 'n'; cell.z = XLSX.SSF._table[14];
cell.v = datenum(cell.v);
}
else cell.t = 's';
//ws['!cols'][C].wch = cell.v.length;
ws[cell_ref] = cell;
}
}
/* TEST: proper range */
if(range.s.c < 10000000) ws['!ref'] = XLSX.utils.encode_range(range);
return ws;
}
var newArr = [[1,2],[3,4]];
var ws = sheet_from_array_of_arrays(newArr);
var wb = new Workbook();
wb.SheetNames.push('DemoSheet');
wb.Sheets['DemoSheet'] = ws;
console.log('Object of workbook');
console.log(ws);
//var stereotypes = Object.keys($scope.childrenAttrsMap);
//console.log(stereotypes);
var wopts = { bookType:'xlsm', bookSST:false, type:'binary' };
var wbout = XLSX.write(wb,wopts);
console.log(wbout);
function s2ab(s) {
var buf = new ArrayBuffer(s.length);
var view = new Uint8Array(buf);
for (var i=0; i!=s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;
return buf;
}
/* the saveAs call downloads a file on the local machine */
saveAs(new Blob([s2ab(wbout)],{type:"application/octet-stream"}), "Gen_Safe1_data.xlsm");
}