【问题标题】:Google Apps Script - Usage of "indexOf" methodGoogle Apps 脚本 - “indexOf”方法的使用
【发布时间】:2020-11-24 11:48:00
【问题描述】:

首先:我真的很努力相处,但我更多的是支持者而不是程序员。

我在 Google Calc 中输入了一些文本,并想检查“Mueller, Klaus”的出现次数(在数据范围内出现了 5 次)。该工作表包含 941 行和 1 列(“A”)。

这是我要查找的代码:

function countKlaus() {
  
  // Aktives Spreadsheet auswählen

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  
  
  // Aktives Tabellenblatt auswählen
  var sheet = ss.getSheetByName("Tabellenblatt1");

  var start = 1;
  var end = sheet.getLastRow();

  var data = sheet.getRange(start,1,end,1).getValues();
  var curRow = start;
  var cntKlaus = 0;
  
  for( x in data )
  {
    var value = daten[x];
    //ui.alert(value);
    if(value.indexOf("Mueller, Klaus")> -1){
      cntKlaus = cntKlaus + 1;
    }
  }
 
  ui.alert(cntKlaus);
  
}

结果消息是“0”,但应该是“5”。

【问题讨论】:

  • Index0f() 可以使用第二个参数,这是一个起始索引检查你最喜欢的 JavaScript 参考

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


【解决方案1】:

问题:

除了这两个问题之外,您已经非常接近解决方案了:

  • daten[x] 应替换为 data[x]

  • ui.alert(cntKlaus) 应替换为 SpreadsheetApp.getUi().alert(cntKlaus)

解决方案(由我优化) - 推荐:

function countKlaus() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName("Tabellenblatt1");
  const cntKlaus = sheet
                   .getRange('A1:A' + sheet.getLastRow())
                   .getValues()
                   .flat()
                   .filter(r=>r.includes("Mueller, Klaus"))
                   .length;
  SpreadsheetApp.getUi().alert(cntKlaus);
}

您可以忽略此术语 + sheet.getLastRow(),因为我们正在过滤非空白值。但我认为首先使用较少的数据会更快。

参考资料:

  • flat : 将二维数组转换为一维数组。
  • filter :仅在 "Mueller, Klaus" 上过滤。
  • Array.prototype.length:获取过滤后数据的长度 这是期望的结果。
  • includes:检查Mueller, Klaus是否包含在文本中。

奖金信息

仅供参考,如果这对您很重要,我的解决方案可以用一行代码重写:

SpreadsheetApp.getUi().alert(SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Tabellenblatt1").getRange('A1:A').getValues().flat().filter(r=>r.includes("Mueller, Klaus")).length);

【讨论】:

  • 对不起,这两种方式都对我不起作用,因为它们仍然会显示“0”
  • @GeorgSchöppen 发布您工作表的屏幕截图。因为我无法重现您的问题。并实际发布您正在使用的完整代码。您可能有干扰我的代码的变量/代码。
  • @GeorgSchöppen 还要确保您没有多余的空格或大写字母。搜索关键字必须与Mueller, Klaus 完全相同。没有多余的空格,没有不同的大写或小写字母。就是这样。
  • @GeorgSchöppen 这不是Mueller, Klaus 而是Test Test ... Mueller, Klaus Test .. 将此额外且非常相关的信息添加到您的问题中。再试一次我更新的答案(优化的代码)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-27
  • 2020-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多