javascript - 如何将 Google 表格中的列值与 Google Apps 脚本合并

标签 javascript google-apps-script google-sheets

我认识到这个问题类似于 this one 。我很遗憾地说,我只是不知道足以遵循那个。

我也认识到它与Google tutorial非常相似。 ,但他们正在创建一个新数组,而我需要组合数组。

问题

我正在尝试从易失列表创建永久列表。永久列表将每天更新。我需要脚本来查找一张纸上的重复项,并将所有新内容复制到另一张纸上。我很确定我的问题主要在于我的逻辑。

我一直在猛烈抨击我能找到的所有类似答案(已注释掉),但我就是想不通。下面有更多解释。

Spreadsheet here

Script here

代码.gs

    function updateRoster() {
  var ss = SpreadsheetApp
    .openById("15DRZRQ2Hcd7MNnAsu_lnZ6n4kiHeXW_OMPP3squbTLE");
  var data = ss
    .getSheetByName("Volatile Data")
    .getDataRange()
    .getValues();
  var saveData = ss
    .getSheetByName("All Data")
    .getDataRange()
    .getValues();
  for (i in data) {
    var value = data[i][3];
    for (j in saveData) {
      var search = saveData[j][3]
      if(value == search) {
        Logger.log(data[i][3]);
      }
    }
  }
}

我在日志中得到了这个:

[16-03-24 06:35:44:914 PDT] 1.00000006E8

[16-03-24 06:35:44:916 PDT] 1.00000012E8

[16-03-24 06:35:44:918 PDT] 1.00000022E8

哪个是正确的,这些是重复项,但我需要选择每个其他行。那些不重复的。

我已经尝试了很多更改,但我只是不断重复第二张表的列表。请帮忙。

最佳答案

简单地用 value != search 替换 value == search 是行不通的,因为即使 saveData 是不同的。但它需要检查所有行是否不同。

如果您确定您的 volatile 数据表中没有任何重复项,您可以这样做:

var saveSheet = ss.getSheetByName("All Data");
loopThroughData:
for (i in data) {
  var value = data[i][3];
  for (j in saveData) {
    var search = saveData[j][3]
    if(value === search) continue loopThroughData;
    //here we leave the inner loop and jump back to the top if
    //even one row is equal
  }
  saveSheet.appendRow(data[i]);
}

编辑:但是,通常最好使用函数而不是 continue 和标签的组合。 因此我更喜欢这个解决方案:

function updateRoster() {
  ...

  function areThereDuplicates(i) {
    var value = data[i][3];
    for(var j in saveData) {
      if(saveData[j][3] === value) return true;
    }
    return false;
  }

  for (i in data) {
    if(!areThereDuplicates(i)) saveSheet.appendRow(data[i]);
  }
}

关于javascript - 如何将 Google 表格中的列值与 Google Apps 脚本合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36201974/

相关文章:

javascript - 替换 HTML 片段中的占位符

css - 使用转换 :rotate does not pass caja? 的 Htmlservice

python - gspread "SpreadsheetNotFound"在某些工作簿上

Google Docs ImportXML 的 XPath 查询

node.js - 如何将 xlsx 文件上传到我自己的谷歌驱动器,然后将它们转换为谷歌电子表格并以编程方式获取可共享链接?

javascript - append 具有从 PHP 返回的特定 ID 的按钮不起作用

javascript - 从 JS 类加载外部 JS 文件

Javascript 将 future 日期添加到 Qualtrics 中的嵌入式数据

javascript - 在html表单日期输入中设置默认值

google-apps-script - 自动完成功能不起作用 - Google 应用程序脚本