【问题标题】:How to make a sum of arrays如何对数组求和
【发布时间】:2018-12-21 20:45:52
【问题描述】:

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

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

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

【问题讨论】:

  • 如果你想对这些数组元素的元素求和,你需要比在Array 上调用+ 运算符更底层。查看如何访问您首选的 JavaScript 语言参考中的元素(并完成一个或三个教程)。

标签: javascript arrays google-apps-script google-sheets


【解决方案1】:

试试这个:

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

【讨论】:

    【解决方案2】:

    这是一个如何添加 2 个数组的示例,但请注意这是以 2D 数组的形式完成的。 getValues() 返回一个 array[i] i = 行数的数组,array[i][j] j 是两个索引都以 0 开头的列。 setValues() 的工作方式相同,但放置一个二维数组。

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

    【讨论】:

      猜你喜欢
      • 2012-04-30
      • 2020-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多