【问题标题】:Find and replace script (Google-apps) for Content grouping查找和替换内容分组的脚本 (Google-apps)
【发布时间】:2019-02-21 09:54:00
【问题描述】:

你们中的一些人可能熟悉 Google Analytics(分析)中的内容分组,它基本上可以让您将任意数量的 URL 分组到用户指定的组中(这对于分析同时属于一起的页面很有用)。我正在编写一个脚本以将其提升到一个新的水平并在 Google 表格中使用它。

目标:有一个工作脚本,可以重写 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

【问题讨论】:

  • 在你的正则表达式中不区分大小写使用标志i

标签: google-apps-script replace find case-insensitive find-replace


【解决方案1】:

您不知何故知道模式和替换值,是吗?您需要将这些知识传授给您的脚本。

最简单的方法是从电子表格中读取,例如在某些工作簿的某些工作表上,您有 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);
  });
}

补充阅读:

【讨论】:

  • 非常感谢您的回答!好主意,使用单独的电子表格。但是,到目前为止,我还无法让您的脚本正常工作。问题是 replaceInSheet 不知道从哪里获取工作表和范围。我尝试添加它们,但这似乎不起作用。我设置了 2 个电子表格,您能指出我哪里出错了吗?带有 URL 的电子表格:docs.google.com/spreadsheets/d/… 带有替换的电子表格:docs.google.com/spreadsheets/d/…
  • @jneu 你从来没有展示过你的replaceInSheets 函数,所以我不得不推断出想要的参数。我的回答假定 sheet 应该是包含需要替换的 url 的工作表,而 range 是 sheet 上的范围对象,其中包含要检查替换的所有值。您可能遇到的一个问题是,如果您尝试使用简单触发器来激活它,它将失败,因为不允许简单触发器访问其他文档。通过 View -> Stackdriver Logs 检查您的 Stackdriver 日志(简单的触发器也不会在 UI 中显示错误消息)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多