【问题标题】:Google Script copy paste谷歌脚本复制粘贴
【发布时间】:2021-11-08 16:03:26
【问题描述】:

现在它会覆盖日志中的相同单元格 我需要它写入下一个单元格而不是覆盖同一个单元格。 https://freeimage.host/I/5GIOjs 我想在名为 Logs in colum 的工作表中搜索 D3=Lumee,你可以看到所有名称。希望它把 J12 复制到特定的名称 https://freeimage.host/i/5GTLJI

function myFunction() {

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = ss.getActiveSheet();
  var j12 = s.getRange('J12').getValues();

  var dynamic_cell = s.getRange('D3').getValue();

  var target_s = ss.getSheetByName('Logs');

  for (var i = 2; i<=target_s.getMaxRows();i++){
    var match = target_s.getRange(i, 1).getValue();
    if(dynamic_cell == match){
      var targetrange = target_s.getRange(i,2,1);
      break;
    }
  }

  targetrange.setValues(j12);

}

【问题讨论】:

  • 这毫无意义:var sourcerange = s.getRange('J12').getValues(); var sourcerange_transposed = Object.keys(sourcerange[0]).map(function (c) { return sourcerange.map(function (r) { return r[c]; }); }); J12 只是一个值。

标签: google-apps-script copy paste


【解决方案1】:

我就是这样做的。

 function myFunction() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sh = ss.getActiveSheet();
  const j12 = sh.getRange('J12').getValue();
  const d3 = sh.getRange('D3').getValue();
  const tsh = ss.getSheetByName('Logs');
  const vs = tsh.getRange(2,1,tsh.getLastRow() -1).getValues();
  for( let i = 0;i<vs.length; i++) {
    if(d3 == vs[i][0]){
      tsh.getRange(i + 2,2).setValue(j12);
      break;
    }
  }
}

这比在每个循环中提取匹配值要快得多。这样一来,我就可以一次获得所有这些,并且循环运行的速度要快得多。

演示:

版本 2:

function myFunction() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sh = ss.getSheetByName('Sheet0');
  const j12 = sh.getRange('J12').getValue();
  const d3 = sh.getRange('D3').getValue();
  const tsh = ss.getSheetByName('Logs');
  const vs = tsh.getRange(2, 1, tsh.getLastRow() - 1).getValues();
  for (let i = 0; i < vs.length; i++) {
    if (d3 == vs[i][0]) {
      tsh.getRange(i + 2, getRowWidth(i + 2, tsh, ss) + 1).setValue(j12);
      break;
    }
  }
}

辅助函数:

function getRowWidth(row, sh, ss) {
  var ss = ss || SpreadsheetApp.getActive();
  var sh = sh || ss.getActiveSheet();
  var row = row || sh.getActiveCell().getRow();
  var rcA = [];
  if(sh.getLastColumn()){rcA = sh.getRange(row, 1, 1, sh.getLastColumn()).getValues().flat().reverse();}
  let s = 0;
  for (let i = 0; i < rcA.length; i++) {
    if (rcA[i].toString().length == 0) {
      s++;
    } else {[![enter image description here][2]][2]
      break;
    }
  }
  return rcA.length - s;
}

演示:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多