1

On opening the excel file whcih is export in .xlsm format file getting the above below errorenter image description here

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");
  }
5
  • 1
    How many rows are you trying to write in the sheet? Do you need xlsm output instead of xlsx? Commented Mar 2, 2017 at 7:09
  • Right now i am inserting only two rows in a sheet. xlsm output is not necessary but i tried with xlsx format but then it will give me corrupt file error Commented Mar 2, 2017 at 9:25
  • Can you try modifying c:10000000, r:10000000 to c:100, r:100 everywhere in your code (also range.s.c < 10000000 to range.s.c < 100) and see if the error persists? Commented Mar 2, 2017 at 9:37
  • yes i tried using this still i am getting this error Commented Mar 2, 2017 at 11:11
  • Above error is solved if i load template.xlsm file consisting of dummy macros data and then write the file consisting of tabular data then it will be able to successfully export the excel file with .xlsm format without above warnings Commented Mar 4, 2017 at 10:34

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.