当前位置: 首页 > 知识库问答 >
问题:

从电子表格中选择并复制一些值,与另一张表格上的另一列进行比较

司英飙
2023-03-14

我读过谷歌脚本的两个链接:有条件地将行从一个电子表格复制到另一个电子表格,然后https://stackoverflow.com/a/4809413/1526044在尝试之后,我不能做我需要的事情。

我有一个电子表格,其中一张表上有一些数据,另一张表上有列上的关键信息,以这种方式进行比较:

KEY Value1 Value2 Value3 
AAA   B      C      D
BBB   Y      Z      W

我需要一个函数来逐行检查我的数据电子表格,查找关键表上的列值。当找到任何值时,它会在数据电子表格的第一列(同一行)上写下键值。

示例:数据电子表格

empty text text text B
empty text text text text
empty text   C  text text
empty text text text Y

因此,在脚本之后,数据将如下所示:

AAA text text text B
empty text text text text
AAA text   C  text text
BBB text text text Y

对此提出的任何其他建议将不胜感激。

共有1个答案

齐英韶
2023-03-14

我修改了一个类似的脚本,我最近回答说,应该做你需要的。我没有测试,但你可以试试。有一些评论可以解释这个想法。。。它可能需要一些调试。

编辑:我对它进行了反复调试;-)因此,它现在似乎可以根据需要工作了——这是我的测试表的链接

function xxx(){ 
/* we have an array 'keysheet'
    and an array datasheet , you get these with something like*/
        var keysheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0].getDataRange().getValues();
    // and
        var datasheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[1].getDataRange().getValues();// if other columns, change index values in the arrays : 0=A, 1=B ...
    // the iteration could be like this :
              for(i=0;i<datasheet.length;++i){ // don't miss any data
                for(j=0;j<keysheet.length;++j){ // iterate through keysheet to find the keys
                  for(k=1;k<keysheet[0].length;++k){ // iterate in keysheet row to check every column except first one
                      var key = keysheet[j][k]
                      Logger.log(k+' '+key+"  "+datasheet[i].toString().match(key))
                 if(datasheet[i].toString().match(key) == key){// check whole rows to find if key is in data
                  var x = datasheet[i].shift();
                   datasheet[i].unshift(keysheet[j][0]) // if match found, replace first element in datasheet with fisrt element in keysheet
                     break  // if found break k loop maybe you should also break j loop ?
                       }
                 }
                   } //loop keysheet
             } // loop datasheet

            /* now you have a modified datasheet array that can directly overwrite the old datasheet 
            using setValues() */
            var sh = SpreadsheetApp.getActiveSpreadsheet().getSheets()[1];// assuming the datasheet sheet is sheet nr2
            Logger.log(datasheet)
           sh.getRange(1,1,datasheet.length,datasheet[0].length).setValues(datasheet);
              }
        //
 类似资料:
  • 我什么都试过了,但还是做不到 我试图使用setValues()将数据从一个电子表格复制到另一个电子表格,因为link对我不起作用。我还需要保持触发器的编辑。 因此,我创建了一个名为AddConvocacao的函数,并且总是在有任何更改时运行脚本。 为什么我在编辑时使用不起作用? 非常感谢!=)

  • 问题内容: 如何使用JOIN从一个表中选择所有列,从另一个表中仅选择一些列?在MySQL中。 问题答案: 只需使用表名: 这将选择所有列和列和从。

  • 我有3个电子表格来存储登录/注销表的数据。签到/退出表(表1)、时间跟踪器表(表2)和镜像表(表3)。镜像表用于比较新列表和旧列表。我想解决的问题是使代码不在表1中。我想把它写在第二张纸上,但问题是这张纸上有所有的触发器,而内容是第1张纸。但因为这是人们将要使用的,我不希望他们能够找到代码并弄乱它,所以我希望sheet2能够用代码控制一切。以下是我认为与此问题相关的代码部分。当它出现在表1上时,它

  • 我想从工作簿中复制一个范围,并将其转置到当前工作表中。 工作簿(“库\document\book1.xlsx”)。工作表(“sheet1”)。范围(“A1:A5”)。复制

  • 问题内容: 如何将值从一列复制到另一列?我有: 我希望有: 我应该有哪些mysql查询? 问题答案: 有关代码的简短答案是: 这是表名,周围是重音符号(又称“-”),因为这是MySQL惯例,用于转义关键字(在这种情况下为关键字)。 请注意,这是非常危险的查询,它将擦除表每行中列中的所有内容,并替换为(无论其值如何) 使用子句将查询限制为仅特定的行集更为常见:

  • 问题内容: 这是我的代码: 您可以看到我要执行的操作,但是我不确定如何正确编写此查询。 我得到的继承人错误: 警告:mysql_fetch_assoc():提供的参数不是有效的MySQL结果资源 这是我的mysql_fetch_assoc: 问题答案: 尝试改变…的喜欢 …至…