【问题标题】:Google Sheets - Moving row to another sheet based on specific columnGoogle表格 - 根据特定列将行移动到另一张表格
【发布时间】:2020-04-20 16:18:28
【问题描述】:

Google 表格脚本编辑非常新,但我正在尝试在表格之间移动行。我已经使用 getLastRow 成功完成了这项工作,但是现在我正尝试根据特定列来完成这项工作。这样做的原因是信息所指向的工作表具有预设的数据验证字段和复选框,导致该行每次都转到第 1000 行。

我正在寻找当在当前工作表的下拉菜单中选择一个选项时,它会根据某一列找到第一个空闲行,并替换该行(除了预设字段外,它基本上是空的) .

目前我有如下:

function onEdit(event) {
  // Move rows to different sheets based on action selected

  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = SpreadsheetApp.getActiveRange();

  if(range.getColumn() == 5 && range.getValue() == "Active") {
    var row = range.getRow();
    var numColumns = sheet.getLastColumn();
    var targetSheet = spreadsheet.getSheetByName("Active");
    var target = targetSheet.getRange(targetSheet.getLastRowSpecial(8) + 1, 1);
    sheet.getRange(row, 1, 1, numColumns).moveTo(target);
    sheet.deleteRow(row);

我在谷歌搜索时发现了以下示例和其他示例,但似乎没有任何效果:

function getLastRowSpecial(column){
  // Get the last row with data for the whole sheet.
  var numRows = targetSheet.getLastRow();

  // Get all data for the given column
  var data = targetSheet.getRange(1, column, numRows).getValues();

  // Iterate backwards and find first non empty cell
  for(var i = data.length - 1 ; i >= 0 ; i--){
    if (data[i][0] != null && data[i][0] != ""){
      return i + 1;
    }
  }
}

非常感谢任何帮助!

【问题讨论】:

标签: javascript google-apps-script google-sheets


【解决方案1】:
function onEdit(e) {
  //Logger.log(JSON.stringify(e));
  //e.source.toast(e.range.columnStart, e.value)
  var sh=e.range.getSheet();
  if(e.range.columnStart==8 && e.value=="Active") {
    var tsh=e.source.getSheetByName("Active");
    var target=tsh.getRange(getColumnHeight(8,tsh,e.source) + 1, 1);
    sh.getRange(e.range.rowStart,1,1,sh.getLastColumn()).moveTo(target);
    sh.deleteRow(e.range.rowStart);
  }
}

function getColumnHeight(col,sh,ss){
  var ss=ss||SpreadsheetApp.getActive();
  var sh=sh||ss.getActiveSheet();
  var col=col||sh.getActiveCell().getColumn();
  var s=0;
  var h=0;
  if(sh.getLastRow()) {
    var v=sh.getRange(1,col,sh.getLastRow(),1).getValues().map(function(r){return r[0];});
    v.forEach(function(e,i){if(e==''){s++;}else{s=0;}h++;});
  }
  return (h-s);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-03
    • 2017-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多