我有一张表格回复的Google表格。电子邮件地址不是必需的,但应该是。无论哪种方式,我试图回填电子邮件地址(为了使它们准备好作为Spiceworks票据导入,但我离题了)。我正在浏览并输入用户名,但我希望Sheets自动填充域名。我想我可以通过检测字符串在@
中结束,然后只是将域添加到其中来实现此目的。目前我有:
// assumes source data in sheet named Done 14-15
// test column with done is col 9 or I
if(s.getName() == "Done 14-15" && r.getColumn() == 9 && r.getValue() == "?@" ) {
var row = r.getRow();
var value = r.getValue();
r.setValue(value + "example.org");
var numColumns = s.getLastColumn();
s.getRange(row, 1, 1, numColumns).copyTo(target);
}
如您所见,我有一个通配符的问号。我也试过使用星号或百分号,但没有得到任何地方。如果我在字面上?@
,我会替换它,但我希望它取anything@
并附加我们的域名。
答案 0 :(得分:0)
RegEx应解决您的问题。
将r.getValue() == "?@"
替换为
var regEx = new RegExp('.*@$')
if (regEx.test(r.getValue())) {
// your code
}
答案 1 :(得分:0)
您可以写r.getValue() == "?@"
r.getValue().endsWith("@")
答案 2 :(得分:0)
电子邮件地址可以像这样轻松更新:
var newValue = event.value.replace(/@$/,'@example.org');
如果未找到匹配项,则不会进行替换... newValue
将等于原始值。在决定做某事之前,我建议不要检查匹配,而是检查结果。
由于您手动输入电子邮件地址,因此这是onEdit()
simple trigger and its event object的良好应用。
function onEdit(event) {
var r = event.range;
var s = r.getSheet();
if (s.getName() == "Done 14-15" && r.getColumn() == 9 && r.getRow() > 1) {
// Replace an @ at the end of the string with domain
var newValue = event.value.replace(/@$/,'@example.org');
// If value changed, write it back to spreadsheet
if (event.value !== newValue) {
event.range.setValue(newValue);
}
}
}
如果您已经编辑过并且需要检查的行,此功能将负责这些行。它使用How can I test a trigger function in GAS?中的技术创建假事件,然后将其传递给onEdit()
触发器函数。
// Call onEdit for each row in conversion sheet
function convertAllEmails() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName( "Done 14-15" );
var lastRow = sheet.getLastRow();
for (var row=1; row<lastRow; row++) {
var fakeEvent = {
range: sheet.getRange(row,9);
value: range.getValue();
};
onEdit( fakeEvent );
}
}