You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Google Sheets脚本求助:高效匹配等差序列值执行指定逻辑

我来帮你解决这个问题!你不用写一堆繁琐的OR条件,用简单的数学判断或者预生成序列数组就能搞定,效率还更高。


方法一:数学公式判断(最简洁高效)

你的目标序列是首项为1、公差为7的等差数列,核心特点是:每个数减去1之后能被7整除,同时数值在1到365之间。利用这个数学规律,就能直接判断列值是否属于目标序列,不用枚举所有值。

修改后的runCode函数如下:

function runCode(){
  // 先补全你遗漏的表定义(示例,根据实际表名调整)
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var dataSheet = ss.getSheetByName("Data");
  var ssRota = ss.getSheetByName("Rota"); // 假设你的目标表叫Rota
  var lastRow = dataSheet.getLastRow();
  // 记得定义ldap变量(你原代码里没给出,这里提示你补上)
  var ldap = 1; // 示例值,替换成你的实际赋值逻辑
  
  for(var x=11; x < dataSheet.getLastColumn(); x++){
    var getCol = dataSheet.getRange(lastRow, x).getValue();
    
    // 处理空值,直接跳过当前列
    if(getCol === ""){
      continue;
    }
    
    // 核心判断:是否在1-365范围内,且满足序列规律
    if(getCol >= 1 && getCol <= 365 && (getCol - 1) % 7 === 0){
      ssRota.getRange(ldap, getCol).setValue("Test");
    } else {
      ssRota.getRange(ldap, getCol).setValue("Input");
    }
  }
}

为什么这个方法可行?

  • 1减1等于0,0除以7余0;8减1等于7,7除以7余0;以此类推,最后365减1等于364,364÷7=52刚好整除,完美匹配你的序列。
  • 不需要预生成所有序列值,省内存还高效,范围越大优势越明显。

方法二:预生成序列数组(直观易懂)

如果你更倾向于用“序列匹配”的思路,可以先把所有目标值存入数组,再用includes()方法快速判断:

function runCode(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var dataSheet = ss.getSheetByName("Data");
  var ssRota = ss.getSheetByName("Rota");
  var lastRow = dataSheet.getLastRow();
  var ldap = 1; // 替换成你的实际赋值逻辑
  
  // 预生成完整的目标序列数组(注意循环条件是<=365,避免漏掉最后一个值)
  var targetNumbers = [];
  var num = 1;
  while(num <= 365){
    targetNumbers.push(num);
    num +=7;
  }
  
  for(var x=11; x < dataSheet.getLastColumn(); x++){
    var getCol = dataSheet.getRange(lastRow, x).getValue();
    
    if(getCol === ""){
      continue;
    }
    
    // 直接判断列值是否在目标数组中
    if(targetNumbers.includes(getCol)){
      ssRota.getRange(ldap, getCol).setValue("Test");
    } else {
      ssRota.getRange(ldap, getCol).setValue("Input");
    }
  }
}

注意点:

  • 你原来的while(data < 365)会漏掉365这个值,因为365不小于365,循环会提前停止,改成num <=365才能包含最后一项。
  • includes()方法逻辑直观,适合对数学判断不太熟悉的场景。

内容的提问来源于stack exchange,提问作者Asyraf Syahmi

火山引擎 最新活动