首页 文章

Google脚本可将特定列从一个工作表复制到另一个工作表的最后一行onEdit

提问于
浏览
0

我正在寻找谷歌应用脚本的一些帮助 . 目前我有一张3张电子表格 . 第一张是来自谷歌表单的数据 . 第二张是“打开”选项卡,第三张是“关闭”选项卡 .

当数据从表单进入电子表格时,它只包含表单所具有的列 . “开放”表格包含表格(表格1)和一些其他单元格的数据组合,以便我提供更多信息,而不是提交表格的人 . 由于此列匹配不匹配,我不能只将整行从表1复制到表2.这也需要在编辑触发器上完成 . 因此,当编辑触发器触发时,我想将行数据存储到内存中,然后将列B复制到选项卡2的最后一行,列C.列C> E,列D> B.等 .

如何将整行存储到内存(我假设的数组)中,然后将特定单元格按特定顺序复制到不同工作表的最后一行?

希望有道理: - /

1 回答

  • 2

    正如您所说,您必须使用数组来获取数据并将其写回所选订单中的另一个工作表 . 这是非常基本的操作,有很多方法可以实现它 . 一种非常容易理解的方法如下:

    • 获取数组中的行数据

    • 逐个拾取每个值并存储在另一个数组中

    • 写回另一张纸上的最后一行1 .

    请注意,数组从0开始编号,行和列从1和A开始,所以你必须做一些数学运算!

    function copyRow(){
      var ss = SpreadsheetApp.getActive();
      var sheet = ss.getActiveSheet();
      var rowIdx = sheet.getActiveRange().getRowIndex();
      var rowValues = sheet.getRange(rowIdx,1,1,sheet.getLastRow()).getValues();
      Logger.log(rowValues);
      var destValues = [];
      destValues.push(rowValues[0][0]);// copy data from col A to col A
      destValues.push(rowValues[0][2]);// copy data from col C to col B
      destValues.push(rowValues[0][1]);// copy data from col B to col C
      destValues.push(rowValues[0][3]);// copy data from col D to col D
      // continue as you want
      var dest = ss.getSheets()[1];//go on chosen sheet (here is the 2cond one)
      dest.getRange(dest.getLastRow()+1,1,1,destValues.length).setValues([destValues]);//update destination sheet with selected values in the right order, the brackets are there to build the 2D array needed to write to a range
    }
    

    如果你想在编辑时运行该功能,那么只需将其命名为 onEdit() 即可!

相关问题