Google Apps Script для копирования массива из нескольких листов на один лист сводки статуса - PullRequest
0 голосов
/ 22 марта 2019

Я пытался найти сценарий, который я могу скопировать для своих целей (с некоторыми изменениями для моего конкретного листа), но ничего не получается, как мне нужно, и у меня нет навыков написания кодаэто с нуля.

У меня есть таблица Google с несколькими листами, куда мы будем постоянно добавлять новые листы, по одному на каждый новый продукт, который мы запускаем.Каждый из листов (включая новые, созданные из шаблона) имеет краткий обзор статуса готовности к запуску этого продукта.Это всегда находится в M3: M10 на каждом листе.

У меня есть лист Сводки состояния, куда я хотел бы вставить информацию, найденную в M3: M10, с каждого листа.Это позволит нам быстро увидеть в Сводке состояния, как работает каждый продукт перед запуском, без необходимости проверять вкладку каждого конкретного листа.

Это то, что я в идеале хотел бы получить:

  • Скрипт будет циклически проходить по каждому листу, содержащемуся в рабочей книге, но пропустить лист, называемый «Сводка состояния».
  • Скрипт будет извлекать данные из M3: M10 с каждого листа
  • Скрипт поместит данные M3: M10 в «Сводку статуса», упорядочив информацию по A2: H2 (метки моих столбцов - A1: H1).Например: данные M3 на листе 1 будут помещены в A2 для сводки состояния, данные M3 на листе 1 будут помещены в B2 для сводки статуса и т. Д.
  • Скрипт будет автоматически использовать новую строку для каждого нового листа.,Например: данные M3 на листе 1 будут в A2 на сводке состояния, данные M3 на листе 2 будут в A3 на сводке статуса и т. Д.

Мне не нужны имена листов

Кто-нибудь может написать это для меня?Я пытаюсь научить себя, как кодировать эти сценарии, поэтому несколько «//» объяснений того, что делает каждый раздел, очень помогли бы.Спасибо за внимание!

1 Ответ

0 голосов
/ 22 марта 2019

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

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]; }); });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...