Я пытаюсь заменить все вхождения определенного текста другим текстом с помощью скрипта Google. Я хочу использовать сценарий, чтобы мне не приходилось вводить вручную каждый раз, когда я хочу заменить.
Это то, что я пробовал. Скрипт не выдает ошибок, поэтому я не уверен, почему он не работает. Я хочу, чтобы сценарий заменил текст example
внутри ссылок, которые выглядят так example.com/this-is-a-link
на example2.com/this-is-a-link
. Я заменяю текст на нескольких листах.
Вот что я пробовал.
function rePlace() {
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getRange("a1:a10000");
var data = range.getValues();
for (var row = 0; row < data.length; row++) {
for (var col = 0; col < data[row].length; col++) {
data[row][col] = (data[row][col]).toString().replace('/.*example.*/', 'example2');
}
}
range.setValues(data);
}
Спасибо.
1 ответ
В вашем сценарии replace('/.*example.*/', 'example2')
необходимо изменить следующим образом.
Из
data[row][col] = (data[row][col]).toString().replace('/.*example.*/', 'example2');
Кому:
data[row][col] = (data[row][col]).toString().replace('example', 'example2');
Или
data[row][col] = (data[row][col]).toString().replace(/example.com\//, 'example2.com/');
Таким образом, example.com/this-is-a-link
изменяется на example2.com/this-is-a-link
.
В вашей ситуации, в качестве другого метода, как насчет использования TextFinder? Когда ваш скрипт изменяется, он становится следующим. При использовании TextFinder, я думаю, стоимость процесса будет ниже, чем у текущего скрипта.
Измененный скрипт:
function rePlace() {
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getRange("a1:a10000");
range.createTextFinder("example").replaceAllWith("example2"); // Added
}
Или
function rePlace() {
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getRange("a1:a10000");
range.createTextFinder("example.com/").useRegularExpression(true).replaceAllWith("example2.com/"); // Added
}
Ссылки:
Добавлено 1:
Если вы хотите использовать приведенный выше сценарий для нескольких листов в активной электронной таблице Google, как насчет следующего сценария?
Пример сценария:
В этом скрипте используется диапазон a1:a10000
на всех листах.
SpreadsheetApp
.getActiveSpreadsheet()
.getSheets()
.forEach(sheet => sheet
.getRange("a1:a10000")
.createTextFinder("example.com/")
.useRegularExpression(true)
.replaceAllWith("example2.com/")
);
Если вы хотите использовать определенные листы, вы также можете использовать следующий сценарий.
var sheetNames = ["Sheet1","Sheet3",,,]; // Please set the sheet names.
SpreadsheetApp
.getActiveSpreadsheet()
.getSheets()
.forEach(sheet => {
if (sheetNames.includes(sheet.getSheetName())) {
sheet
.getRange("a1:a10000")
.createTextFinder("example.com/")
.useRegularExpression(true)
.replaceAllWith("example2.com/")
}
});
Добавлено 2:
По поводу вашего второго вопроса о Is there a way to replace all at once without the script visiting one sheet after another to make replacements? Because I think that's why it's delaying. I have 50 sheets. Perfect solution but if it would mass replace I think it would be even better?
из вашего комментария, в этом случае я хотел бы предложить использовать API Таблиц. Я думаю, что при использовании Sheets API можно будет снизить стоимость процесса.
Пример сценария:
Прежде чем использовать этот сценарий, включите API-интерфейс Sheets в расширенных службах Google а> .
const ss = SpreadsheetApp.getActiveSpreadsheet();
const requests = ss.getSheets().map(s => ({
findReplace:{
find: "example.com/",
searchByRegex: true,
replacement: "example2.com/",
range: {sheetId: s.getSheetId(), startRowIndex: 0, startColumnIndex: 0, endColumnIndex: 1}
}
}));
Sheets.Spreadsheets.batchUpdate({requests: requests}, ss.getId());
Заметка:
Если вы проверите все ячейки на всех листах в электронной таблице Google, я думаю, что вы также можете использовать следующий скрипт.
SpreadsheetApp.getActiveSpreadsheet().createTextFinder("example.com/").useRegularExpression(true).replaceAllWith("example2.com/");
Похожие вопросы
Новые вопросы
google-apps-script
Используйте для вопросов о Google Apps Script, серверной платформе Google для облачных сценариев на основе Javascript для автоматизации задач в продуктах Google и сторонних службах. Используйте в дополнение к релевантным тегам продукта (например, [google-sheets], [google-docs]) или API (например, [google-drive-api]), где это применимо.