Скопируйте содержимое определенных листов на главный лист - PullRequest
0 голосов
/ 22 апреля 2019

У меня есть электронная таблица Google, которая состоит из нескольких страниц:

  • От 1 до 31 (1 в день месяца);
  • 1 главная страница (где я собираю некоторые данные)за каждый день);
  • 1 страница с графикой на основе главной страницы.

Существует ли автоматический способ копирования всех данных со всех страниц (1 в день (игнорируя ваши собственныеглавный лист и лист с диаграммой) на главную страницу • Копирование только из диапазонов A12: B18, F12: F18 и размещение одних данных ниже другого? A7 имеет заголовок каждой страницы (день месяца), а в A8 -имя пользователя, я хотел бы, чтобы эти 2 данные также отображались в виде столбцов рядом с данными главной страницы.

Я знаю, что мог бы дать оптимизированный в этой таблице лист, чтобы пользователь мог заполнить всетолько 1 электронная таблица, однако она не будет для них интуитивно понятной (и, следовательно, если я сделаю это, она принесет много ошибок при заполнении). Я думаю, что в будущем я буду делать форму Google для этого случая, но я хотел бы реализовать этот скриптэтот ауна данный момент, и я перенесу тот же код в несколько других электронных таблиц, которые находятся в этом ужасном рабочем формате (легко для пользователя только заполнять данные ежедневно, но для пользователя, который будет собирать весь месяц(объединение данных каждого дня в основной рабочей таблице), это чрезвычайно трудоемкий процесс.

Я думаю, что у кого-то уже есть готовый сценарий для этого, потому что очень часто можно найти таблицы в этом формате

Спасибо

1 Ответ

1 голос
/ 22 апреля 2019

В ответ на ваш комментарий вот соответствующий раздел кода:

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

или, если вам нравится использовать функции Array, вы можете сделать это следующим образом:

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