簡體   English   中英

Google Apps 腳本 - 使用“indexOf”方法

[英]Google Apps Script - Usage of "indexOf" method

第一:我真的很努力地相處,但我更多的是支持者而不是程序員。

我在 Google Calc 中放入了一些 Text 並想檢查“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”。

問題:

您非常接近解決方案,除了以下兩個問題:

  • 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 :將二維數組轉換為一維數組。
  • 過濾器:僅過濾"Mueller, Klaus"
  • Array.prototype.length : 獲取過濾數據的長度,即期望的結果。
  • 包括:檢查Mueller, Klaus是否包含在文本中。

獎金信息

僅供參考,如果這對您很重要,我的解決方案可以用一行代碼重寫:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM