#javascript #regex #if-statement #google-apps-script #google-sheets
#javascript #регулярное выражение #if-оператор #google-apps-script #google-sheets
Вопрос:
Следующий код не работает, когда я помещаю значение с пробелом в editedCellValue
function onEdit(e) {
var editedCellRange =
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Test").getActiveRange();
var editedCellValue =
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("test").getActiveRange().getValue;
if (RegExp(editedCellValue).test("s")==true){editedCellRange.setValue("contains space")}
else
{editedCellRange.setValue("ELSE IF")}
}
Пожалуйста, помогите, почему это не работает.
Спасибо.
Ответ №1:
Точки изменения:
- Если вы хотите использовать
test
, пожалуйста, измените на(/s/g).test(editedCellValue)
. - Например, вы также можете использовать
includes
likeeditedCellValue.includes(" ")
. А такжеindexOf
может быть использован. - В вашей ситуации, я думаю, что объект event также может быть использован.
- В вашем скрипте
var editedCellValue = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("test").getActiveRange().getValue;
значение не извлекается, посколькуgetValue
не выполняется. Пожалуйста, поставьте()
лайкgetValue()
. - Вы можете объявить его
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Test")
.
Когда вышеуказанные пункты будут отражены в вашем скрипте, это будет выглядеть следующим образом.
Модифицированный скрипт:
function onEdit(e) {
var range = e.range;
if (range.getSheet().getSheetName().toLowerCase() != "test") return;
var editedCellValue = range.getValue();
if ((/s/g).test(editedCellValue)) { // or if (editedCellValue.includes(" ")) {
range.setValue("contains space")
} else {
range.setValue("ELSE IF")
}
}
- В этом случае при редактировании ячейки
onEdit
автоматически запускается триггер onEdit. И в вашем скрипте отредактированная ячейка перезаписывается. Пожалуйста, будьте осторожны с этим.
Примечание:
- Если вы хотите напрямую запустить функцию с помощью редактора сценариев, пожалуйста, измените приведенный выше сценарий следующим образом.
- От
var range = e.range; if (range.getSheet().getSheetName().toLowerCase() != "test") return;
- Для
var range = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Test").getActiveRange();
- От
Ссылки:
Комментарии:
1. Спасибо! (/s/g).test(editedCellValue) работает.
2. @user13854773 Спасибо за ответ. Я рад, что ваша проблема была решена. Теперь я подумал, что в вашей ситуации
(/s/).test(editedCellValue)
это также можно использовать.3. Также ценю совет по очистке кода, не повторяясь.