我有大约4个单独的电子表格可以接受用户输入,当用户完成操作后,他们按下按钮以“在”另一张纸上“记录”信息。用户输入中的所有电子表格条目均分配有唯一的ID。
我想做的是当用户单击按钮时,脚本在另一张纸上搜索匹配的ID,并将B列更新为新值。
基本上像一个简单的查找,但是它不返回值,而是更新。
Sheet 1 Sheet 2
A B A B
1 ID123 | Received > 1 ID123 | Ordered
2 2
因此,当用户将电子表格1中的ID123更改为接收时,该按钮将在电子表格2中搜索ID123,并且如果存在(始终存在),则工作表2中的单元格b1将被更新为工作表1中的B1中的值。 / p>
我确实碰到过另一则关于CRUD web app的帖子,但是我认为这比我在这里想要做的要复杂得多!
谢谢您的帮助!
编辑: 我提到的按钮是通过自定义图像添加的,此脚本将被分配到该图像中。
添加“开始工作表”上只会有1个ID可能会有所帮助。正是“目标表”将具有多个ID,即使同一ID重复多次,在这种情况下,所有匹配的ID也需要更新。
Sample of Starting Sheet和 Sample of Destination Sheet
正如您在上面看到的那样,在“起始表”中,ID3的状态为“已接收”。按下“提交”按钮后,脚本将需要在“目标表”中找到“ ID3”,并将“值”列中的任何文本替换为“已接收”。因此,在此示例中,ID3从“已订购”更新为“已接收”。
答案 0 :(得分:0)
尝试一下:
function onEdit(e) {
if(e.range.getSheet().getName() != 'Sheet1'){return;}
if(e.range.columnStart==2) {
var id=e.range.offset(0,-1).getValue();
var rg=e.source.getSheetByName('Sheet2').getDataRange()
var vA=rg.getValues();
for(var i=1;i<vA.length;i++) {
if(vA[i][0]==id) {
vA[i][1]=e.value;
break;
}
}
}
rg.setValues(vA);
}
Sheet1和Sheet2:
您可以根据需要将此功能附加到按钮:
function updateEntrees() {
var ss=SpreadsheetApp.getActive();
var sh1=ss.getSheetByName('Sheet1');
var rg1a=sh1.getRange(2,1,sh1.getLastRow()-1,1);
var vA1a=rg1a.getValues();
var rg1b=sh1.getRange(2,2,sh1.getLastRow()-1,1);
var vA1b=rg1b.getValues();
var sh2=ss.getSheetByName('Sheet2');
var rg2a=sh2.getRange(2,1,sh2.getLastRow()-1,1);
var vA2a=rg2a.getValues();
var rg2b=sh2.getRange(2,2,sh2.getLastRow()-1,1);
var vA2b=rg2b.getValues();
for(var i=0;i<vA1a.length;i++) {
for(var j=0;j<vA2a.length;j++) {
if(vA1a[i][0]==vA2a[j][0]) {
vA2b[j][0]=vA1b[i][0]
}
}
}
rg2b.setValues(vA2b);
}
答案 1 :(得分:0)
您可以复制/粘贴以下现有按钮功能内的代码,以在按ID搜索后将当前单元格值复制到目标工作表单元格中。不过请检查变量名是否重复。
var acRange = SpreadsheetApp.getActiveSheet().getActiveRange();
var val = acRange.getValue();
var row = acRange.getRow();
var col = acRange.getColumn();
var id = acRange
.getSheet()
.getRange(row, 1)
.getValue();
var rg = SpreadsheetApp.getSheetByName('destination sheet name here').getDataRange();
var vA = rg.getValues();
for (var i = 1; i < vA.length; i++) {
if (vA[i][0] == id) {
vA[i][col - 1] = val;
break;
}
}
rg.setValues(vA);