Google Apps脚本,用于将多个工作表中的数组复制到单个状态摘要工作表中

时间:2019-03-21 22:55:26

标签: google-apps-script google-sheets

我一直在尝试找到可以复制用于目的的脚本(对我的工作表进行了一些修改),但是我没有做任何需要的工作,而且我没有编写代码的技能从头开始。

我有一个Google电子表格,其中包含多个工作表,我们将不断添加新工作表,其中每个发布的新产品一个。每个工作表(包括从模板创建的新工作表)都具有该产品启动准备状态的“概览”摘要。始终位于每张纸上的M3:M10。

我有一个状态摘要表,我想从每个表中粘贴在M3:M10处找到的信息。这样一来,我们就可以在状态摘要中快速查看每个产品在发布前的运行情况,而无需我们检查每个特定工作表的标签。

这是我理想的情况:

  • 脚本将遍历工作簿中包含的每个工作表,但跳过名为“状态摘要”的工作表。
  • 脚本将从每张图纸中提取M3:M10中的数据
  • 脚本会将M3:M10数据存储在“状态摘要”中,从而组织A2:H2中的信息(我的列标签为A1:H1)。例如:工作表1上的M3数据将存储在状态摘要中的A2中,工作表1中的M3数据将存储在状态摘要中的B2中,等等。
  • 脚本将为每个新工作表自动使用换行。例如:工作表1上的M3数据将在状态摘要中显示在A2中,工作表2上的M3数据将在状态摘要中显示在A3中,等等。

我不需要随附的工作表名称。

有人能为我写这个吗?我正在尝试教自己如何编写这些脚本,因此,对每个部分的作用进行一些“ //”解释将大有帮助。谢谢您的光临!

1 个答案:

答案 0 :(得分:0)

尝试一下:

function atAGlance() {
  var ss=SpreadsheetApp.getActive();
  var excl=['Status Summary'];
  var sh=ss.getSheetByName('Status Summary');
  var shts=ss.getSheets();
  var n=1;
  for(var i=0;i<shts.length;i++) {
    if(excl.indexOf(shts[i].getName())==-1){
      var v1=shts[i].getRange("M3:M10").getValues();
      var v2=transpose(v1);
      sh.getRange(1 + n++,1,v2.length,v2[0].length).setValues(v2);
    }
  }
}
//https://stackoverflow.com/a/16705104/7215091
function transpose(a)
{
  return Object.keys(a[0]).map(function (c) { return a.map(function (r) { return r[c]; }); });
}

从[https://stackoverflow.com/a/16705104/7215091]获得移调 (https://stackoverflow.com/a/16705104/7215091

此版本允许您从流程中排除工作表,并且可以如下所示在testAtAGlance()函数中运行它。我使用的示例排除了“状态摘要”和“全局”。

function testAtAGlance() {
  atAGlance(['Status Summary','Globals']);
}

function atAGlance(excl) {
  var excl=excl || ['Status Summary'];
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Status Summary');
  var shts=ss.getSheets();
  var n=1;
  for(var i=0;i<shts.length;i++) {
    if(excl.indexOf(shts[i].getName())==-1){
      var v1=shts[i].getRange("M3:M10").getValues();
      var v2=transpose(v1);
      sh.getRange(1 + n++,1,v2.length,v2[0].length).setValues(v2);
    }
  }
}
//https://stackoverflow.com/a/16705104/7215091
function transpose(a)
{
  return Object.keys(a[0]).map(function (c) { return a.map(function (r) { return r[c]; }); });
}