Как вы используете значение ячейки, чтобы найти соответствующее имя листа? - PullRequest
1 голос
/ 23 апреля 2019

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

У меня есть список имен в столбце C, напр. Джон, Марк и Уилл, которые начинаются в строке 40. Затем я хотел бы скопировать строку информации Джона на лист под названием «Джон», а информацию Марка на лист под названием «Марк» и т. Д., Чтобы информация каждого человека была обобщена. на их собственном листе. У меня возникли проблемы с использованием значения, указанного в столбце C (имя человека), а затем с помощью этого значения, чтобы найти лист с координирующим именем.

function CopyInfo() {
var CopyFrom = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Summary");
var ColumntoSearch = 3;
var LastRow = CopyFrom.getLastRow();

 //Gets column to search for names to compare
  var Range = CopyFrom.getRange(40, ColumntoSearch, LastRow, 1);
  var Values = Range.getValues();

 //Sets the amount of data to copy over
  var NumberofColumns = 11;
  var NumberofRows = 1;

//Compares all the names in the Summary sheet
 var d=0;
  for(var i=0;i<Values.length;i++) {
     var Name = CopyFrom.getRange(i-d+40, 3);
     var CopyTo = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(Name);
    if(Name == ????????){
      var RangetoCopy=CopyFrom.getRange(i-d+40,1,NumberofRows,NumberofColumns); 
     var DestRange=CopyTo.getRange(CopyTo.getLastRow()+1,1,NumberofRows,NumberofColumns);
      RangetoCopy.copyTo(DestRange);
      d++;

     }
  }
}

1 Ответ

0 голосов
/ 24 апреля 2019
  • Вы хотите скопировать значения из листа Summary на каждый лист с именем листа, извлеченным из столбца "C" на Summary листе.
  • Существуют значения для копирования встолбец «A: K».
  • Например, когда строка 45 листа Summary имеет значения a45, b45, c45, d45, e45, f45, g45, h45, i45, j45, k45, значения копируются чуть ниже последней строки имени листа c45.

Если мое понимание верно, как насчет этой модификации?Я думаю, что ваш сценарий почти правильный.Поэтому я немного изменил ваш сценарий.

Измененный сценарий:

function CopyInfo() {
  var ss = SpreadsheetApp.getActiveSpreadsheet(); // Added
  var CopyFrom = ss.getSheetByName("Summary"); // Modified
  var ColumntoSearch = 3;
  var LastRow = CopyFrom.getLastRow();

  //Gets column to search for names to compare
  var Range = CopyFrom.getRange(40, ColumntoSearch, LastRow, 1);
  var Values = Range.getValues();

  //Sets the amount of data to copy over
  var NumberofColumns = 11;
  var NumberofRows = 1;

  //Compares all the names in the Summary sheet
  // var d=0; // Removed
  for (var i = 0; i < Values.length; i++) {
    var Name = Values[i][0]; // Modified
    var CopyTo = ss.getSheetByName(Name); // Modified
    if (Name) { // Modified
      if (!CopyTo) CopyTo = ss.insertSheet(Name); // Added
      var RangetoCopy = CopyFrom.getRange(i + 40, 1, NumberofRows, NumberofColumns); // Modified
      var DestRange = CopyTo.getRange(CopyTo.getLastRow() + 1, 1, NumberofRows, NumberofColumns);
      RangetoCopy.copyTo(DestRange);
      // d++; // Removed
    }
  }
}

Примечание:

  • В этом измененном сценарии, если имя листане найден, вставлен новый лист с именем листа.Если вы не хотите вставлять новый лист, замените if(!CopyTo) CopyTo = ss.insertSheet(Name) на следующий сценарий.

    if (CopyTo) {
      var RangetoCopy = CopyFrom.getRange(i + 40, 1, NumberofRows, NumberofColumns); 
      var DestRange = CopyTo.getRange(CopyTo.getLastRow() + 1, 1, NumberofRows, NumberofColumns);
      RangetoCopy.copyTo(DestRange);
    }
    

Если я неправильно понял ваш вопрос, и это не тот результат, который вам нужен,Я прошу прощения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...