在打开以 .xlsm 格式文件导出的 excel 文件时,出现以下错误
请在控制器中查看以下代码以编写 excel 文件
使用 js-xls 插件的 Angular 控制器功能。使用了两个名为 js-xls 和 filesaver.js 的插件用于 saveAs blob 功能
$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");
}