基于1个单元格值将表单响应读取到仪表板



感谢所有回答我之前查询的内容,老实说,我真的无法继续使用谷歌应用程序脚本:-(

我试图做的是相对简单的,对于excel上的VBA来说,这将是一件轻而易举的事,但我想表单是它自己的野兽。

我想做的是…

  1. 在表单中读取来自标签"上的谷歌表单的响应;评论"单元格B2:H
  2. 比较"0"上B列中的唯一键响应;评论"在标签"A1"上有一个唯一的键;"仪表板">
  3. 如果有匹配项,我想将它们添加到单元格G3:M20中的仪表板选项卡上
  4. 这将最终在每次A1中的下拉菜单"0"时刷新;仪表板";已更改

响应上的数据总是7列,从字符串到日期各不相同。有时G&H列将为空白

说真的,这里非常感谢任何帮助,一旦我完成了这项工作,我就不必再碰谷歌页面了。哈哈,

function bnbm() {
var spreadsheet = SpreadsheetApp.getActive();
var sheet = SpreadsheetApp.getActive().getSheetByName("Comments");

var range = sheet.getRange("Comments!B2:H");
var values = range.getValues();
var values2 = values.filter(String);
var range2 = sheet.getRange("Dashboard!A1")
var rowd = range2.getValues();
var rowd2 = rowd.filter(String);
var result = sheet.getRange("Dashboard!G3:M20")

for (var i = 0; i < values2.length; i++) {

if (values2[i][0] == rowd2[0][0]) {
result.setValues(values2[i][1])

}
} 
}

我不认为你的结果数组可以是固定的长度,因为你的Comment在sh.getLastRow()中失败了,所以我认为这就是你想要的:

在Apps Script中使用B2:H这样的范围不是一个好主意,因为它们在范围的末尾生成了大量的空数据,这些数据必须被过滤掉。

function bnbm() {
const ss = SpreadsheetApp.getActive();
const csh = ss.getSheetByName("Comments");
const dsh = ss.getSheetByName('Dashboard');
const vs = csh.getRange(2, 2, csh.getLastRow() - 1, 7).getValues();
const A1 = dsh.getRange("A1").getValue();
let oA = [];//matches array
for (let i = 0; i < vs.length; i++) {
//if column B Comments = Dashboard A1
if (vs[i][0] == A1) {
oA.push(vs[i]);//save current row in matches array
}
}
if ((dsh.getLastRow() - 2) > 0) {
dsh.getRange(3, 7, dsh.getLastRow() - 2, 7).clearContent();//clear contents if any
}
if (oA.length > 0) {
dsh.getRange(3, 7, oA.length, oA[0].length).setValues(oA);//move matches to dashboard
ss.toast(`${oA.length}`, 'Matches');//number of matches
} else {
ss.toast('No Matches', 'Matches', 10);//no matches
}
}

示例注释数据集:

COL1COL8
24
12192192222204123192317

最新更新