【问题标题】:Copy and Paste a Cell to First Empty Row in Specific Column google sheets将单元格复制并粘贴到特定列谷歌表中的第一个空行
【发布时间】:2020-05-28 20:11:07
【问题描述】:

我正在尝试将单元格 J3 的值从活动报告中复制并粘贴到 L 列的第一个空单元格中。

要复制的单元格是固定的,但要粘贴的单元格是可变的。

到目前为止,我使用的代码只能将值从 J3 复制到 L 列的最后一行,而不是从顶部开始的第一个空白行。任何操纵目的地的尝试均未成功。我能够将其粘贴在顶部,但它一直覆盖同一个单元格。

   function copyData() {
   var ss = SpreadsheetApp.getActiveSpreadsheet();
   var sName = ss.getSheetName();

if (sName == 'Activity Report'){
  var source = ss.getRange("Activity Report!J3");
  var destSheet = ss.getSheetByName("Activity Report");
  var lastRow = destSheet.getLastRow();

  var destination = destSheet.getRange("L"+lastRow);
  destination.activate();
  source.copyTo(destination, SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
  };
}

提前致谢!

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    将数据复制到 L 列的第一个空单元格

    将值从J3复制到L列的底部

    function copyData() {
      var ss=SpreadsheetApp.getActive();
      var sh=ss.getSheetByName('Activity Report');
      sh.getRange(sh.getLastRow()+1,12).setValue(sh.getRange(3,10).getValue());
    }
    

    试试这个:

    这会将其放入 L 列的第一个空单元格中,如果没有空格,则可能是 lastRow()+1。

    function runOne() {
      var ss=SpreadsheetApp.getActive();
      var sh=ss.getSheetByName('Activity Report');
      var f=false;
      var L=sh.getRange(1,12,sh.getLastRow()+1,1).getValues().map(function(r,i){if(!f && r[0].toString().length==0){f=true;return i+1;}else{return '';}}).filter(function(e){return e;});
      sh.getRange(L,12).setValue(sh.getRange(3,10).getValue());
    }
    

    这使用reduce:

    如果没有别的,那就更简单了。

    function copyData() {
      var ss=SpreadsheetApp.getActive();
      var sh=ss.getSheetByName('Activity Report');
      var f=false;
      var L=sh.getRange(1,12,sh.getLastRow()+1,1).getValues().reduce(function(a,r,i){if(!f && r[0].toString().length==0){f=true;return a + i;}return a;},1);
      sh.getRange(L,12).setValue(sh.getRange(3,10).getValue());
    }
    

    Array.map

    Array.filter

    Array.reduce

    【讨论】:

    • 虽然这是我所拥有的更加优化的版本,但我认为我需要使用 appendRow 来获得我正在寻找的结果。我不想将 J3 保存到工作表的底部,只是 L 列中的第一个空白行。谢谢
    • 通常当人们说他们的意思是最后一行之后的行。所以你的字面意思是 L 列中的第一个空单元格,即使它上面和下面都有数据?
    • 是的,我为造成的混乱道歉。我目前的工作是function copyDataRCCompletion() { var ss=SpreadsheetApp.getActive(); var sh=ss.getSheetByName('Activity Report'); var sh2=ss.getSheetByName('Copy of Activity Report'); sh2.getRange(sh2.getLastRow()+1,2).setValue(sh.getRange(3,10).getValue()); sh2.getRange(sh2.getLastRow()+1,1).setValue(sh2.getRange(1,5).getValue()); }
    • 新脚本输出Exception: cannot convert error
    • 我猜如果我知道如何更好地使用 reduce,那将是一个更好的解决方案。所以我会玩,因为无论如何我都需要变得更好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-10
    • 2011-09-08
    • 1970-01-01
    • 2022-10-14
    相关资源
    最近更新 更多