【问题标题】:Select and copy some values from spreadsheet comparing to another column on another sheet从电子表格中选择并复制一些值,与另一张纸上的另一列进行比较
【发布时间】:2012-07-15 17:44:55
【问题描述】:

我已经阅读了这两个链接Google Script: Conditionally copy rows from one spreadsheet to anotherhttps://stackoverflow.com/a/4809413/1526044,在尝试之后我无法做我需要的事情。

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

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

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

示例: 数据电子表格

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

所以在脚本之后,DATA 将如下所示:

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

如有任何其他建议,我们将不胜感激。

【问题讨论】:

  • 你能贴出你试过的代码吗?
  • 不确定它是否会有所帮助。 :(
  • this 回答你的问题了吗?

标签: google-apps-script google-sheets google-sheets-api


【解决方案1】:

我修改了我最近回答的类似脚本,它应该可以满足您的需求。我没有测试,但你可以试一试。有一些 cmets 可以解释这个想法......它可能需要一些调试。

编辑:我对此进行了尝试并对其进行了更多调试 ;-) 所以它现在似乎可以根据需要工作 - 这里是 the link to my test sheet

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);
              }
        //

【讨论】:

  • 谢谢,我会试试的。抱歉回复晚了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-29
相关资源
最近更新 更多