Google表格if语句中的通配符

时间:2015-10-06 14:04:45

标签: javascript google-apps-script google-sheets

我有一张表格回复的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@并附加我们的域名。

3 个答案:

答案 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 );
  }
}