【问题标题】:Searching a Google Form response (Google Sheets) for row and column numbers在 Google 表单响应(Google 表格)中搜索行号和列号
【发布时间】:2019-09-12 03:09:09
【问题描述】:

我试图弄清楚如何搜索谷歌表单响应(谷歌表格),以便找到行号和列号的值来提取数据。

我有其他所有东西,但正在搜索列和行,我不确定如何对此进行 2D 搜索。

这是我要搜索和提取的数据,但我不想要所有数据,只想要特定的单元格/范围。

https://docs.google.com/spreadsheets/d/1ehA0fXBM6CPBAKfHvBbouRPjOMDxrXSdFI0zMye3G7c/edit?usp=sharing

我的计划是将“员工姓名”提取到另一个电子表格中,以便了解谁完成了它以及每天在什么位置完成它。因为表单总是收到响应,所以我希望脚本每天多次提取数据以显示表单的合规性。我希望响应看起来像这样:

https://docs.google.com/spreadsheets/d/1QyK5c-vxkt5BnM-wM-m80RZCO_29KWoF_isIZBOllvQ/edit?usp=sharing

这是我希望让我的 Google 脚本执行的操作: 1.脚本搜索源表找到位置。 2. 脚本返回列出位置的行和列。 3. 脚本取行和列并从行和getValue()中减去1;那个细胞。 (在这种情况下,将是填写表格的员工。) 4. 脚本根据员工位置将“员工姓名”返回到目标表。 (所以它在正确的行中。) 结果,脚本从表单响应中提取数据并列出完成它的人。

我已经准备好从特定单元格/范围中提取数据并根据位置和日期将其粘贴到目标工作表。

现在我已经解释了我想要做什么,我可以解释我在哪里被难住了。我无法弄清楚命令的重复或何时起作用。我想搜索一个特定位置,然后返回行号和列号。这是我一直在尝试操作的代码,但我无法让它在 2d 甚至行中搜索以返回值 int eh for/when 命令。

function updateVerification() {
  var ss = SpreadsheetApp.openById("1ehA0fXBM6CPBAKfHvBbouRPjOMDxrXSdFI0zMye3G7c");
  var sheet = ss.getSheetByName("Sheet1");
  var ss_dest = SpreadsheetApp.openById("1QyK5c-vxkt5BnM-wM-m80RZCO_29KWoF_isIZBOllvQ");
  var sheet_dest = ss_dest.getSheetByName("Destination");
  var rows=ss.getDataRange().getValues();
  var paste = 0;
  for(var r=0; r<rows.length; r++){
    for(var c=0; c<rows[r].length; c++){
      if(rows[r][c] == "Location #1"){
        paste = sheet.getRange(rows[r]+":"+rows[c]).getValue();
        sheet_dest.getRange(2,4).setValue(paste);
      }
    }
  }
}

如果有人能帮助我,我将不胜感激。

感谢您的任何帮助。 :)

【问题讨论】:

  • 您需要用括号调用getDataRange()getValues(),复数形式。也不清楚targetRange 来自哪里。

标签: google-apps-script google-sheets


【解决方案1】:

我猜你想要这样的东西:

function updateVerification() {
  var ss=SpreadsheetApp.openById("1ehA0fXBM6CPBAKfHvBbouRPjOMDxrXSdFI0zMye3G7c");
  var sh=ss.getSheetByName("Sheet1");
  var ss_dest=SpreadsheetApp.openById("1QyK5c-vxkt5BnM-wM-m80RZCO_29KWoF_isIZBOllvQ")
  var sh_dest=ss_dest.getSheetByName("Destination");
  var rows=ss.getDataRange().getValues();
  for(var r=0;r<rows.length;r++) {
    for(var c=0;c<rows[r].length;c++) {
      if(rows[r][c]=="Location #1") {
        sh_dest.appendRow(rows[r]);
      }
    }
  }
}

如果我删除单元格内容并将其替换为数组索引,您的数据将如下所示:

[
["row[0][0]","rows[0][1],"rows[0][2]"],
["row[1][0]","rows[1][1],"rows[1][2]"],
["row[2][0]","rows[2][1],"rows[2][2]"],
["row[3][0]","rows[3][1],"rows[3][2]"]//rows[rows.length-1]
]

【讨论】:

  • 您能解释一下 for 部分的工作原理吗?我真的很想了解“r
  • @JoshuaGottschalk 有帮助吗?
  • 哦……是的,这确实有帮助。我明白了,这是一个数组。如何使用 r,c 来获取 == "Location #1" 的范围? (如果我想获得等于那个范围并移动它?或者也许从 r/c 获得 -1 并在同一行中获得一些东西?)
  • 我更改了上面的代码,以反映我目前拥有的内容。
  • r 是第一个索引,c 是第二个。因此,外部循环使用 r 遍历行,而 c 遍历列。
猜你喜欢
  • 1970-01-01
  • 2020-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-27
  • 2013-07-07
  • 2020-03-12
相关资源
最近更新 更多