Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何对数组求和_Javascript_Arrays_Google Apps Script_Google Sheets - Fatal编程技术网

Javascript 如何对数组求和

Javascript 如何对数组求和,javascript,arrays,google-apps-script,google-sheets,Javascript,Arrays,Google Apps Script,Google Sheets,我使用以下代码获取所有具有数字名称的工作表的所有值。一旦找到数字表名,它必须将第6列的第8行和第108行相加。所有工作表必须在正确的数组中求和。现在,我的脚本在数组崩溃后将数据添加到数组中,而不是进行求和 示例单元格=值:变量=值 活页18,6=1:colonne[1]=1 第2页8,6=2:colonne[1]=3 第3页8,6=3:colonne[1]=6 第1页8,7=2:colonne[2]=2 第2页8,7=2:colonne[2]=4 第3页8,7=2:colonne[2]=6 函数

我使用以下代码获取所有具有数字名称的工作表的所有值。一旦找到数字表名,它必须将第6列的第8行和第108行相加。所有工作表必须在正确的数组中求和。现在,我的脚本在数组崩溃后将数据添加到数组中,而不是进行求和

示例单元格=值:变量=值

活页18,6=1:colonne[1]=1 第2页8,6=2:colonne[1]=3 第3页8,6=3:colonne[1]=6 第1页8,7=2:colonne[2]=2 第2页8,7=2:colonne[2]=4 第3页8,7=2:colonne[2]=6 函数演算{ var ss=电子表格app.getActiveSpreadsheet; var s=ss.getActiveSheet; var out=新数组 var sheets=电子表格app.getActiveSpreadsheet.getSheets; var子串1; var colonne=[];
对于var i=0;i这里是一个如何添加2个数组的示例,但请注意,这是以2D数组的形式完成的。getValues返回一个数组[i]i=行数,数组[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);
}
试试这个:

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');
}  

如果要对数组元素的元素求和,需要比调用数组上的+运算符低很多。请查看如何访问首选JavaScript语言引用中的元素,并进行一两次教程。相关