Как сделать сумму массивов - PullRequest
0 голосов
/ 21 декабря 2018

Я использую следующий код, чтобы получить все значения всех моих листов с числовым именем.Как только он находит числовое имя листа, он должен суммировать строки от 8 до 108 столбца 6. Все листы должны быть суммированы в правильном массиве.Прямо сейчас мой скрипт добавляет данные в массив после того, как он падает, вместо того, чтобы делать сумму.

пример (ячейка = значение: переменная = значение)

  1. лист 1 (8,6) = 1: колонна [1] = 1
  2. лист 2 (8,6) = 2: колонна [1] = 3
  3. лист 3 (8, 6) = 3: колонна [1] = 6
  4. лист 1 (8,7) = 2: колонна [2] = 2
  5. лист 2 (8,7) = 2:двоеточие [2] = 4
  6. лист 3 (8,7) = 2: двоеточие [2] = 6
function CalculTotal() {
  var ss = SpreadsheetApp.getActiveSpreadsheet(); 
  var s = ss.getActiveSheet();
  var out = new Array()
  var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
  var substring1;
  var colonne=[];

  for (var i=0 ; i<sheets.length ; i++) 
  {
    substring1=sheets[i].getName();
    if(!isNaN(parseFloat(substring1)) && isFinite(substring1)){
      colonne=colonne+(ss.getSheetByName(substring1).getRange(8,6,100).getValues());
              }
              }
    s.getRange(8,4,100).setValues(colonne);
}

Ответы [ 2 ]

0 голосов
/ 22 декабря 2018

Попробуйте это:

function CalcTotal() {
  var ss=SpreadsheetApp.getActive(); 
  var sheets=ss.getSheets();
  var regex=new RegExp('^[\\d\\.,]+$')
  var total=0;
  var n=1;
  var html='<style>th,td{border:1px solid #000;}</style><table>';
  html+=Utilities.formatString('<tr><th>%s</th><th>%s</th><th>%s</th></tr>','Item','Sheet','Sum')
  for(var i=0;i<sheets.length;i++){
    var name=sheets[i].getName();
    var sum=0;
    var nameisnum=false;
    var result=regex.exec(name);
    if(result){
      nameisnum=true;
      var shi=ss.getSheetByName(name);
      var rgi=shi.getRange(8,6,101,1);
      var vAi=rgi.getValues();
      for(var j=0;j<vAi.length;j++){
        sum+=vAi[j][0]; 
      }
      if(nameisnum){
        html+=Utilities.formatString('<tr><td>%s</td><td>%s</td><td>%s</td></tr>',n++,name,sum);
        total+=sum;
      }
    }
  }  
  html+=Utilities.formatString('<tr><td colspan="2">Total:</td><td>%s</td></tr>',total);
  html+='</table>';
  var ui=HtmlService.createHtmlOutput(html);
  SpreadsheetApp.getUi().showModelessDialog(ui, 'Sheet Sums');
}  
0 голосов
/ 22 декабря 2018

Вот пример того, как добавить 2 массива, но обратите внимание, что это делается в виде двумерного массива.getValues ​​() возвращает массив массива [i] i = количество строк, array [i] [j] j - столбец, оба индекса которого начинаются с 0. setValues ​​() работает аналогично, но помещает 2D-массив.

function CalculTotal() {
  var ss = SpreadsheetApp.getActiveSpreadsheet(); 
  var s = ss.getActiveSheet();
  var out = new Array()
  var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
  var substring1;
  var colonne=[];

  // Initialize result array
  for( var i=0; i<100; i++ ) colonne[i] = [0];

  for (var i=0 ; i<sheets.length ; i++) 
  {
    substring1=sheets[i].getName();
    if(!isNaN(parseFloat(substring1)) && isFinite(substring1)){
      var values = ss.getSheetByName(substring1).getRange(8,6,100,1).getValues();
      for( var j=0; j<values.length; j++ ) {
        colonne[j][0] = colonne[j][0]+values[j][0];
      }
    }
  }
  s.getRange(8,4,100,1).setValues(colonne);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...