forked from sheetjs/sheetjs
		
	- `BrtUid` record (fixes #1044 h/t @gustavosimil) - `sheet_to_json` allow default for errors (fixes #1035 h/t @arijitkanrar) - docs and demos update
		
			
				
	
	
		
			97 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/* xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */
 | 
						|
/* eslint-env browser */
 | 
						|
/* global XLSX */
 | 
						|
/* exported SheetJSExportService, SheetJSImportDirective */
 | 
						|
function SheetJSExportService(uiGridExporterService) {
 | 
						|
 | 
						|
  function exportSheetJS(gridApi, wopts) {
 | 
						|
    var columns = uiGridExporterService.getColumnHeaders(gridApi.grid, 'all');
 | 
						|
    var data = uiGridExporterService.getData(gridApi.grid, 'all', 'all');
 | 
						|
 | 
						|
    var fileName = gridApi.grid.options.filename || 'SheetJS';
 | 
						|
    fileName += wopts.bookType ? "." + wopts.bookType : '.xlsx';
 | 
						|
 | 
						|
    var sheetName = gridApi.grid.options.sheetname || 'Sheet1';
 | 
						|
 | 
						|
    var wb = XLSX.utils.book_new(), ws = uigrid_to_sheet(data, columns);
 | 
						|
    XLSX.utils.book_append_sheet(wb, ws, sheetName);
 | 
						|
    XLSX.writeFile(wb, fileName);
 | 
						|
  }
 | 
						|
 | 
						|
  var service = {};
 | 
						|
  service.exportXLSB = function exportXLSB(gridApi) { return exportSheetJS(gridApi, { bookType: 'xlsb', bookSST: true, type: 'array' }); };
 | 
						|
  service.exportXLSX = function exportXLSX(gridApi) { return exportSheetJS(gridApi, { bookType: 'xlsx', bookSST: true, type: 'array' }); }
 | 
						|
 | 
						|
  return service;
 | 
						|
 | 
						|
  /* utilities */
 | 
						|
  function uigrid_to_sheet(data, columns) {
 | 
						|
    var o = [], oo = [], i = 0, j = 0;
 | 
						|
 | 
						|
    /* column headers */
 | 
						|
    for(j = 0; j < columns.length; ++j) oo.push(get_value(columns[j]));
 | 
						|
    o.push(oo);
 | 
						|
 | 
						|
    /* table data */
 | 
						|
    for(i = 0; i < data.length; ++i) {
 | 
						|
      oo = [];
 | 
						|
      for(j = 0; j < data[i].length; ++j) oo.push(get_value(data[i][j]));
 | 
						|
      o.push(oo);
 | 
						|
    }
 | 
						|
    /* aoa_to_sheet converts an array of arrays into a worksheet object */
 | 
						|
    return XLSX.utils.aoa_to_sheet(o);
 | 
						|
  }
 | 
						|
 | 
						|
  function get_value(col) {
 | 
						|
    if(!col) return col;
 | 
						|
    if(col.value) return col.value;
 | 
						|
    if(col.displayName) return col.displayName;
 | 
						|
    if(col.name) return col.name;
 | 
						|
    return null;
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
function SheetJSImportDirective() {
 | 
						|
  return {
 | 
						|
    scope: { opts: '=' },
 | 
						|
    link: function($scope, $elm) {
 | 
						|
      $elm.on('change', function(changeEvent) {
 | 
						|
        var reader = new FileReader();
 | 
						|
 | 
						|
        reader.onload = function(e) {
 | 
						|
          /* read workbook */
 | 
						|
          var bstr = e.target.result;
 | 
						|
          var wb = XLSX.read(bstr, {type:'binary'});
 | 
						|
 | 
						|
          /* grab first sheet */
 | 
						|
          var wsname = wb.SheetNames[0];
 | 
						|
          var ws = wb.Sheets[wsname];
 | 
						|
 | 
						|
          /* grab first row and generate column headers */
 | 
						|
          var aoa = XLSX.utils.sheet_to_json(ws, {header:1, raw:false});
 | 
						|
          var cols = [];
 | 
						|
          for(var i = 0; i < aoa[0].length; ++i) cols[i] = { field: aoa[0][i] };
 | 
						|
 | 
						|
          /* generate rest of the data */
 | 
						|
          var data = [];
 | 
						|
          for(var r = 1; r < aoa.length; ++r) {
 | 
						|
            data[r-1] = {};
 | 
						|
            for(i = 0; i < aoa[r].length; ++i) {
 | 
						|
              if(aoa[r][i] == null) continue;
 | 
						|
              data[r-1][aoa[0][i]] = aoa[r][i]
 | 
						|
            }
 | 
						|
          }
 | 
						|
 | 
						|
          /* update scope */
 | 
						|
          $scope.$apply(function() {
 | 
						|
            $scope.opts.columnDefs = cols;
 | 
						|
            $scope.opts.data = data;
 | 
						|
          });
 | 
						|
        };
 | 
						|
 | 
						|
        reader.readAsBinaryString(changeEvent.target.files[0]);
 | 
						|
      });
 | 
						|
    }
 | 
						|
  };
 | 
						|
}
 |