【问题标题】:Google Script to copy specific columns from one sheet to another sheets last row onEdit谷歌脚本将特定列从一张纸复制到另一张纸最后一行
【发布时间】:2014-09-26 10:41:41
【问题描述】:

我正在寻找有关 google app 脚本的帮助。目前我有一个有 3 张工作表的电子表格。第一张表是来自谷歌表单的数据。第二张是“打开”标签,第三张是“关闭”标签。

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

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

希望这是有道理的:-/

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

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

    • 获取数组中的行数据
    • 一个一个地取出每个值并存储在另一个数组中
    • 在另一张纸上写回最后一行 +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() 即可完成!

    【讨论】:

      【解决方案2】:

      来源:https://stackoverflow.com/a/64297866/14427194

      function onEdit(e) {
        //e.source.toast("Entry");
        //console.log(JSON.stringify(e));
        const sh=e.range.getSheet();
        if(sh.getName()=="Sheet1" && e.range.columnStart==20 && e.value=="TRUE") {
          const tsh=e.source.getSheetByName('Sheet2');
          const nr=tsh.getLastRow()+1;
          sh.getRange(e.range.rowStart,1,1,12).moveTo(tsh.getRange(nr,1,1,12));
          sh.getRange(e.range.rowStart,16,1,4).moveTo(tsh.getRange(nr,16,1,4));
          sh.deleteRow(e.range.rowStart);
        }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多