Google App Script + Google Sheet - L oop над каждой ячейкой в ​​активном листе и добавьте формулу с локальным адресом ячейки - PullRequest
0 голосов
/ 22 января 2020

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

Мне нужно:

  • Выбрать активную электронную таблицу
  • Выбрать каждую ячейку в электронной таблице
  • Внедрите формулу в каждую ячейку, но, что важно, она должна добавить локальный адрес ячейки в конец формулы I. EG: если я введу формулу "= IMPORTRANGE (" my.url.com "," My Sheet !! A1 "), то следующая ячейка должна быть A2, а формула должна заканчиваться на A2 повторите с A1 до AA69.

Для более полного понимания

  • Я связываю два отдельных листа Google вместе. Я использую IMPORTRANGE для считывания URL-адреса целевого листа, затем извлекаю нужную «вкладку листа» из целевого листа.

  • Затем у меня есть дубликат шаблона целевого листа в который я хотел бы скопировать всю целевую информацию. Например : MySheet - это пустой дубликат TargetSheet, мне нужно скопировать всю информацию из TargetSheet в MySheet с помощью IMPORTRANGE, однако есть много команд, которые используйте один и тот же макет листа, но у всех есть уникальные URL, и я создаю генератор листов, поэтому скрипт значительно ускоряет это.

У меня есть стандартный захват листа, который отлично работает :

var activeSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var rangeList = activeSheet.getRange(['A1:AA69']);

И я построил моя формула из других переменных, которая собирается достаточно легко:

// Create a combined formula from above variables, at present the only part missing is the cell to inject this into and closing parenthesis.
var IMPORTRANGE_FORMULACONSTRUCT = IMPORTRANGE_BEGINFORMULA_VALUE + "(" + '"' + SPREADSHEETURLVALUE + '"' + ", " + '"' + IMPORTRANGE_INFORMATIONTAB_VALUE + "!" ;
// Print to Logs (View with Ctrl + Enter)
Logger.log(IMPORTRANGE_FORMULACONSTRUCT);

Как я могу l oop по каждой ячейке и добавить каждую ячейку в конец моей формулы?

Помощь оценена .

1 Ответ

0 голосов
/ 22 января 2020

Вы можете получить запись A1 каждой ячейки в вашем диапазоне и использовать ее для локального адреса в вашей формуле.

Пример:

function myFunction() {
  var IMPORTRANGE_BEGINFORMULA_VALUE = "=IMPORTRANGE";
  var SPREADSHEETURLVALUE = "my.url.com"
  var activeSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var IMPORTRANGE_INFORMATIONTAB_VALUE = activeSheet.getName();
  var rangeList = activeSheet.getRange('A1:AA69');
  var array=[];
  for( var i = 0; i < rangeList.getLastRow(); i++){
    array[i]=[];
    for( var j = 0; j < rangeList.getLastColumn(); j++){    
      var notation = activeSheet.getRange(i+1,j+1).getA1Notation();
      var notation = rangeList.getCell(i+1,j+1).getA1Notation();
      // Create a combined formula from above variables, at present the only part missing is the cell to inject this into and closing parenthesis.
      var IMPORTRANGE_FORMULACONSTRUCT = IMPORTRANGE_BEGINFORMULA_VALUE + "(" + '"' + SPREADSHEETURLVALUE + '"' + ", " + '"' + IMPORTRANGE_INFORMATIONTAB_VALUE + "!" + notation + '")' ;
      // Print to Logs (View with Ctrl + Enter)
      array[i].push(IMPORTRANGE_FORMULACONSTRUCT);
    }
  }
  rangeList.setValues(array);
}

Имейте в виду, что этот код может быть медленным, если вы выполняете итерацию в большом диапазоне.

...