【问题标题】:String starts with in Google Script字符串以 Google Script 开头
【发布时间】:2017-04-05 00:46:07
【问题描述】:

我正在为我们正在进行的一些选举编写数据转换脚本。第一部分将所有名称更改为大写,这部分脚本工作正常。但是,我对脚本的第二部分有疑问。有些 ID 会有 S,S123456,有些则没有 S,123456。出于我的目的,我需要所有 ID 的开头都没有 s。当我在 Google 中运行此脚本时,它会返回

TypeError: 在对象 S123456 中找不到函数 startsWith。

有什么想法吗?

function convertResponseData(){
  var resultsInformation = SpreadsheetApp.openById('MySheetID').getSheetByName('Election Responses');
  var resultsDataRange = resultsInformation.getRange(1, 1, 2500, 6);
  var resultsData = resultsDataRange.getValues();
  for (var i = 0; i < resultsData.length; i++) {
    var row = resultsData[i];
    var resultsStudentNameLower = row[1];
    var resultsStudentID = row[2]
    var studentNameUpper = resultsStudentNameLower.toUpperCase()
    resultsInformation.getRange(i+1, 2).setValue(studentNameUpper)
    if (var n = resultsStudentID.startsWith("S")){
      var resultsStudentIDNoS = resultsStudentID.substring(1,20);
      resultsInformation.getRange(i+1, 3).setValue(resultsStudentIDNoS)
    }
  }
}

【问题讨论】:

  • Cannot find function startsWith - 您使用的是哪个浏览器?而且,resultsStudentID 总是一个字符串吗?也许您需要像这样检查if (resultsStudentID.startsWith &amp;&amp; resultsStudentID.startsWith("S")){ - 您也可以删除var n =,因为您从不使用该值
  • 或者,if (resultsStudentID.toString().startsWith("S")){ - 只要您的浏览器不是 Internet Exploder
  • 我正在使用谷歌浏览器,我尝试了if (resultsStudentID.toString().startsWith("S")){,它给了我同样的错误。 @JaromandaX
  • 奇怪...console.log(typeof resultsStudentID)是什么
  • 日志返回 [17-04-04 20:59:53:932 EDT] 字符串 @JaromandaX

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


【解决方案1】:

startsWith() 在 google 脚本中不受支持。相反,您可以使用

resultsStudentID.indexOf("S") == 0 

检查字符串是否以“S”开头

function convertResponseData(){
  var resultsInformation = SpreadsheetApp.openById('MySheetID').getSheetByName('Election Responses');
  var resultsDataRange = resultsInformation.getRange(1, 1, 2500, 6);
  var resultsData = resultsDataRange.getValues();
  for (var i = 0; i < resultsData.length; i++) {
    var row = resultsData[i];
    var resultsStudentNameLower = row[1];
    var resultsStudentID = row[2]
    var studentNameUpper = resultsStudentNameLower.toUpperCase()
    resultsInformation.getRange(i+1, 2).setValue(studentNameUpper)
    if (resultsStudentID.indexOf("S") == 0 ){
      var resultsStudentIDNoS = resultsStudentID.substring(1,20);  //You also do this resultsStudentID.substring(1) to get a substring from index 1 to end. 
      resultsInformation.getRange(i+1, 3).setValue(resultsStudentIDNoS)
    }
  }
}

希望有帮助

【讨论】:

  • 这是正确答案。似乎问题的作者忘记了这个话题,但这应该被标记为这个问题的有效解决方案
【解决方案2】:

2020 年更新:

感谢V8 Runtime,您现在可以使用现代 ECMAScript 语法。

你可以使用startsWith():

function myFunction() {
  let str = 'Something';
  console.log(str.startsWith("S")); // returns true
}

【讨论】:

  • 也适用于超过 1 个字符...if (rangeVals[row][0].startsWith("10%")) {
  • 但它仍然不适用于非拉丁字符(至少是西里尔字符),因此您必须在比较之前将字符串音译为拉丁文。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-02
  • 2011-04-03
  • 2014-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-13
相关资源
最近更新 更多