Google Script - итерация по столбцу данных, а затем замена значения итерации гиперссылкой в ​​конце - PullRequest
0 голосов
/ 13 октября 2018

У меня есть список данных о продукте на главном листе в B1: Bn

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

Последнее, что я хочу сделать, это получить URL-адрес этого нового листа и создать функцию, такую ​​как = HYPERLINK ("https: / [sheet url]", "Product Name") и установите эту функцию в исходную ячейку на главном листе.

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

function cloneSheetsIter() {
  var ss = SpreadsheetApp.openById("1bF3oqKQtcM31mTLB0asEzntTTQvmiE1e7SUvenMJBi4"); //Get spreadsheet as var
  var mainSheet = ss.getSheetByName("Main");
  var dataRange = mainSheet.getRange("B1:B2")
  var data = dataRange.getValues(); //Get Mainsheet as Var

  var check01 = mainSheet.getRange("F1");  //cells to dump check info into
  var iter = 0; //Used to limit the number of sheets this will create
  var maxIter = 2;
  while (iter != maxIter){
    for (i in data){
      iter+=1 //Counting number of iterations to check
      var newName = data[i];

      var newSheet = ss.getSheetByName('Template').copyTo(ss);
      SpreadsheetApp.flush(); // Utilities.sleep(2000);
      newSheet.setName(newName);
      ss.setActiveSheet(newSheet);
      var nameCell = newSheet.getRange("B2").setValue(newName);

      var urlName = '=HYPERLINK("'+(ss.getUrl())+'#gid='+(ss.getSheetId())+'"'+',"'+newName+'")'; //building an in-cell hyperlink function
      check01.setValue(urlName); //check01 is a fixed cell just for checking
    }
  }
}

Я уверен, что упускаю что-то довольно простое, но я не могу понять, что это такое.Есть идеи?

Спасибо!

1 Ответ

0 голосов
/ 13 октября 2018

Хорошо, так что я наконец-то нашел способ сделать это, но я не уверен, что это лучший способ.Я установил var startRow, и я использую его для определения var dataRange.

Затем я использую var iter для подсчета итераций, через которые он работает (в конце)

Затем послеСоздавая мою функцию гиперссылки, я получаю диапазон, где имя продукта снова живет, используя mainSheet.getRange (startRow + (iter), 2), а затем устанавливая его значение как var urlName.

function cloneSheetsIter() {
  var ss = SpreadsheetApp.openById("1bF3oqKQtcM31mTLB0asEzntTTQvmiE1e7SUvenMJBi4"); //Get spreadsheet as var
  var mainSheet = ss.getSheetByName("Main");
  var startRow = 1;
  var dataRange = mainSheet.getRange(startRow, 2,2,6);
  var data = dataRange.getValues(); //Get Mainsheet as Var

  var iter = 0; //Used to limit the numberr of sheets this will create
  var maxIter = 2;
  while (iter != maxIter){
    for (i in data){
      var row = data[i];

      var newName = row[0];
      var colour = row[2];

      var newSheet = ss.getSheetByName('Template').copyTo(ss);
      SpreadsheetApp.flush(); // Utilities.sleep(2000);
      newSheet.setName(newName);
      ss.setActiveSheet(newSheet);
      var nameCell = newSheet.getRange("B2").setValue(newName);
      var idCell = newSheet.getRange("H2").setValue(colour);

      var urlName = '=HYPERLINK("'+(ss.getUrl())+'#gid='+(ss.getSheetId())+'"'+',"'+newName+'")'; //building an in-cell hyperlink function
      mainSheet.getRange(startRow + (iter),2).setValue(urlName); //The number after (i), is the column where the setValue(Status) will land.

      iter+=1 //Counting number of iterations to check
    }
  }
}

enter image description here

Тем не менее, если есть лучшие или более эффективные способы сделать это, то это тоже было бы здорово.

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