Найти и заменить скрипт (Google-приложения) для группировки контента - PullRequest
0 голосов
/ 17 сентября 2018

Некоторые из вас могут быть знакомы с группировкой контента в Google Analytics, которая в основном позволяет группировать любое количество URL-адресов в указанные пользователем группы (это полезно для анализа страниц, которые объединяются в одно и то же время).Я работаю над сценарием, чтобы перейти на следующий уровень и использовать его в Google Sheets.

Цель: иметь работающий скрипт, который переписывает URL-адреса и дает им другое имя, независимо от того, использует ли он верхний или нижний регистры в URL-адресе.

Пока у меня есть это:

function onOpen() {
    var sheet = SpreadsheetApp.getActiveSheet();
    var range = sheet.getRange("a1:a10000");
    var to_replace = /.*example.*/;
    var replace_with = "TEST";
    var to_replace2 = /.*another-example.*/;
    var replace_with2 = "TEST-Nr2";

    replaceInSheet(sheet,range, to_replace, replace_with);
    replaceInSheet(sheet,range, to_replace2, replace_with2);
 }

Этот скрипт работает в том смысле, что он переписывает URL с «Примером» в «Тест» и переписывает «Другой пример» в TEST-Nr2.

Однако в конечном скрипте, вероятно, будут тысячи URL, которые нужно будет переписать.Кроме того, некоторые URL содержат заглавные буквы, которые я хочу игнорировать и просто переписать.

Все вышеперечисленное приводит меня к двум вопросам:

  1. Как я могу написать сценарий таким образом (например, с помощью регулярных выражений?), Который я выиграл?у меня есть число в Googleplex для To_replace и replace_with?

  2. Как сделать мои переменные to_replace без учета регистра?

Если есть дополнительная информациянужно по этому вопросу я с радостью предоставлю.

С уважением,

JNeu

1 Ответ

0 голосов
/ 17 сентября 2018

Как-то вы знаете шаблоны и значения замены, да?Вам необходимо передать эти знания в свой сценарий.

Самый простой способ - это прочитать его из электронной таблицы, например, на каком-то листе в какой-либо книге, у вас есть 1 столбец с шаблоном и другой столбец с заменой.Затем вы просто читаете эти данные в (Range#getValues()), а затем выполняете итерацию этого массива для обработки вашего диапазона данных.Обратите внимание, что шаблон, который вы сохраняете на листе, не должен включать косые черты конструктора, т. Е. Вы хотите, чтобы \d{1,3}, а не /\d{1,3}/ в ячейке.

Пример:

function processAll() {
  const source = SpreadsheetApp.openById("id of the spreadsheet with pattern - replacement data"),
        info = source.getSheetByName("some sheet name")
                 .getDataRange().getValues();

  const databook = SpreadsheetApp.getActive(),
        sheet = databook.getSheetByName("name of the sheet with data to process");
  if (!sheet) return; // sheet with that name doesn't exist.
  const range = sheet.getRange(1, 1, sheet.getLastRow(), 1);

  info.forEach(function (row) {
    // Create case-insensitive pattern from the string in Column A, e.g. \d{1,3} and NOT /\d{1,3}/
    var pattern = new RegExp(row[0], "i"); 
    var repl = row[1];  // replacement text from Column B
    replaceInSheet(sheet, range, pattern, repl);
  });
}

Дополнительное чтение:

...