你们中的一些人可能熟悉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);
}
这个脚本的工作原理在于它将带有'Example'的URL重写为'Test',并将'Another-example'重写为TEST-Nr2。
但是,最终脚本可能会有数千个需要重写的URL。此外,一些URL中包含大写,我想忽略它们并重写。
以上所有问题都让我有两个问题:
如果需要更多关于此事的信息,我很乐意提供。
亲切的问候,
JNeu
不知怎的,你知道模式和替换值,是吗?您需要将这些知识传授给您的脚本。
最简单的方法是从电子表格中读取它,例如在某些工作簿中的某个工作表上,您有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);
});
}
补充阅读: