将特定工作表的内容复制到主工作表

时间:2019-04-22 14:42:00

标签: google-apps-script google-sheets

我有一个包含多个页面的google电子表格:

  • 从1到31(每月1天);
  • 1个母版页(我每天都在其中收集一些数据);
  • 1个基于母版页的图形。

是否存在一种自动方式将所有页面(每天1个(忽略自己的母版纸和图表纸)的所有数据)复制到母版纸? •仅从范围A12:B18,F12:F18复制并将一个数据放在另一个下方? A7具有每个页面的标题(每月的某天),而在A8中则具有用户的名称,我希望这两个数据也可以作为母版页面数据旁边的列出现。

我知道我可以在此工作表中给一个优化的表,以便用户仅用1个电子表格填写所有内容,但是对于他们来说这并不直观(因此,这样做会带来很多填充错误)。我认为将来会在这种情况下使用Google表单,但目前我想实现此脚本以实现这种自动化,并且我会将相同的代码带到其他几种使用这种可怕工作格式的电子表格中(这很容易,因为用户只需要每天填写一次数据,但是对于要编译整个月(将主工作表中的每一天都加入到数据中)的用户来说,这是非常费力的。

我认为有人已经为此准备好了一些脚本,因为找到这种格式的电子表格非常普遍

谢谢

1 个答案:

答案 0 :(得分:1)

为回应您的评论,以下是相关的代码部分:

  var excl=['Globals','Form Responses 1','Form Responses 2'];//These were my choices you probably need to change them
  var masterSheet="Master";
  for(var i=0;i<excl.length;i++) {ss.getSheetByName(excl[i]).hideSheet()}

您是否填写了希望从流程中排除的工作表名称?

尝试一下:

function combineDataForUser616324() {
  var ss=SpreadsheetApp.getActive();
  var msh=ss.getSheetByName('Master');
  msh.clearContents();
  var xshts=['Globals','Form Responses 1','Form Responses 2','Master'];
  var ashts=ss.getSheets();
  for(var ia=0;ia<ashts.length;ia++) {
    if(xshts.indexOf(ashts[ia].getName())==-1) {
      var sh=ashts[ia];
      var name=sh.getName();
      var rlA=sh.getRangeList(['A12:F18','A7','A8']).getRanges();
      var vA=rlA[0].getValues();
      vA=vA.map(function(r){return [r[0],r[1],r[5]]});
      for(var i=0;i<vA.length;i++) {
        if(i==0) {
          vA[i].splice(0,0,rlA[2].getValue(),rlA[1].getValue());
        }else{
          vA[i].splice(0,0,'','');
        }
      }
      msh.getRange(msh.getLastRow()+1,1,vA.length,vA[0].length).setValues(vA);
    }
  }
}

或者如果您喜欢使用数组函数,可以通过以下方式做到这一点:

function combineDataForUser616324() {
  var ss=SpreadsheetApp.getActive();
  var msh=ss.getSheetByName('Master');
  msh.clearContents();
  var xshts=['Globals','Form Responses 1','Form Responses 2','Master'];
  var ashts=ss.getSheets();
  for(var ia=0;ia<ashts.length;ia++) {
    if(xshts.indexOf(ashts[ia].getName())==-1) {
      var sh=ashts[ia];
      var name=sh.getName();
      var rlA=sh.getRangeList(['A12:F18','A7','A8']).getRanges();
      var vA=rlA[0].getValues();
      vA=vA.map(function(r){return [r[0],r[1],r[5]]});
      vA=vA.map(function(r,i){
        if(i==0) {
          r.splice(0,0,rlA[2].getValue(),rlA[1].getValue());//this returns shallow copy so cannot return it
          return r;
        }else{
          r.splice(0,0,'','');//same thing here
          return r;
        }
      });
      /*  
      for(var i=0;i<vA.length;i++) {
        if(i==0) {
          vA[i].splice(0,0,rlA[2].getValue(),rlA[1].getValue());
        }else{
          vA[i].splice(0,0,'','');
        }
      }
      */
      msh.getRange(msh.getLastRow()+1,1,vA.length,vA[0].length).setValues(vA);
    }
  }
}