1

在打开以 .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");
  }
4

0 回答 0