首页 > 解决方案 > Gscript寻找一张纸的一个值并写入第一张纸

问题描述

我正在努力让它发挥作用。基本上,我在谷歌工作表文件中有两张工作表(工作表 1 和工作表 3)。我在工作表 1 中有一个列 A,其值为 (1,2,3,4,5,6),在工作表 2 中有一个值为 (1,2,3) - 两者都从第 2 行开始。我想要当在 sheet3 中找不到匹配的值时,在 B 列中的 sheet1 更新如下 1 OK 2 OK 3 OK 4 not Ok 5 not Ok 6 not Ok

我尝试使用数组并最终得到以下结果

function IDValidation1() {
  var ss= SpreadsheetApp.openById('1-GWOrXt-rbfpocrJjO-5ywDXu2oG4y1x14na252525');
  var sh1=ss.getSheetByName('Sheet1');
  var sh2=ss.getSheetByName("Sheet3");
  var sh1rg=sh1.getRange(2,1,sh1.getLastRow(),1); //header is row 1
  var sh2rg=sh2.getRange(2,1,sh2.getLastRow(),1);//header is row 1
  var sh1cvA=sh1rg.getValues();
  var sh2cvA=sh2rg.getValues();
  for(var i=0;i<sh1cvA.length-1; i++){
    for (var j=0;j<sh2cvA.length-1; j++){
      if (sh1cvA[i]==sh2cvA[j]){
          sh1.getRange("B"+[i+2]).setValue("Ok");
          }
      else {
          sh1.getRange("B"+[i+2]).setValue("Not Ok");
          }
    }
  }}

我怎样才能让它工作?目前它总是以“Not Ok”更新,但我希望前三个值是“Ok”

感谢您的帮助!

标签: arraysgoogle-apps-script

解决方案


您将 getValues 的输出视为一维数组。即使您只要求一列 - 它仍然会为您的列返回一个具有固定值 1 的二维数组。

getValues() 返回此范围的值的矩形网格。

返回值的二维数组,按行索引,然后按列

改变你的比较

if (sh1cvA[i]==sh2cvA[j]){

if (sh1cvA[i][0]==sh2cvA[j][0]){

推荐阅读