Namokonov

get_ids_importrange

Aug 26th, 2022 (edited)
1,344
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.  
  3. В Таблице должен быть лист "лист с ссылками", в нем, в первом столбце должны быть ссылки или ID Таблиц, скрипт будет идти по ссылками, обходить каждый лист и искать формулы IMPORTRANGE, вытаскивать из них ссылки и вставлять их в строку. Далее скрипт будет красить ячейку с ссылкой на Таблицу / ID в красный цвет. Дальше скрипт перейдет к первой не красной ссылке / ID и всё повторится.
  4.  
  5. */
  6.  
  7. function get_ids_importrange() {
  8.   const ss = SpreadsheetApp.getActive();
  9.   const sh = ss.getSheetByName('лист с ссылками');
  10.   const dr = sh.getDataRange();
  11.   const d = dr.getValues();
  12.   const colours = dr.getBackgrounds();
  13.  
  14.   for (var n = 1; n < d.length; n++) {
  15.     try {
  16.       if (colours[n][0] == '#ff0000') continue;
  17.       const obj = {};
  18.       const s0 = SpreadsheetApp.openById(getIdFromUrl(d[n][0]));
  19.       const sheets = s0.getSheets();
  20.       sheets.forEach(f => f.getDataRange().getFormulas().forEach(row => row.forEach(cell => getIdFromUrl(cell) ? obj[getIdFromUrl(cell)] = true : '')))
  21.       var values = Object.keys(obj);
  22.       if (!values.length) {
  23.         sh.getRange(n + 1, 2, 1, 1).setValue('-');
  24.         continue;
  25.       };
  26.       values = [values];
  27.       sh.getRange(n + 1, 2, values.length, values[0].length).setValues(values);
  28.  
  29.     } catch (err) {
  30.       sh.getRange(n + 1, 2, 1, 1).setValue(err.message);
  31.     }
  32.  
  33.     sh.getRange(n + 1, 1).setBackground('red');
  34.     SpreadsheetApp.flush();
  35.   }
  36. };
  37.  
  38. function getIdFromUrl(url) {
  39.   return url.match(/[\w]{33,}/g);
  40. };
Advertisement
Add Comment
Please, Sign In to add comment