Google脚本通过唯一ID

时间:2019-03-29 04:58:23

标签: google-apps-script google-sheets

我有大约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 SheetSample of Destination Sheet

正如您在上面看到的那样,在“起始表”中,ID3的状态为“已接收”。按下“提交”按钮后,脚本将需要在“目标表”中找到“ ID3”,并将“值”列中的任何文本替换为“已接收”。因此,在此示例中,ID3从“已订购”更新为“已接收”。

2 个答案:

答案 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:

enter image description here

您可以根据需要将此功能附加到按钮:

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