选中状态后,将2列数据移到其他选项卡

时间:2019-07-01 23:31:53

标签: google-apps-script

我仍然是使用应用程序脚本的初学者,我的经验有限。我一直在尝试更改为执行类似任务而运行的脚本,但是在进行一些更改后仍无法使其正常工作。

我希望实现的目标是在ProspectiveSites选项卡的Z列中选择“是”,然后将第15和24列移动到2019年7月,移到A和B列,并在“总计”行上方输入。当前位于第28行,但确实会根据需要向上或向下移动页面。

如果可能的话,我希望它根据当前月份移动,即现在是7月,以便移动该July2019选项卡,在8月移动到August2019,依此类推。

尝试运行脚本时出现此错误; TypeError:无法从未定义中读取属性“ range”。 (第3行,文件“代码”)

这里是一个样本 https://docs.google.com/spreadsheets/d/1q2nJ0A-GBqRFxtLl3tTk-AFzYQU-NU5w_gqYt5C4xVs/edit?usp=sharing

function onEdit(e) {
  var ss = SpreadsheetApp.getActiveSheet();
  if (ss.getName() == 'ProspectiveSites' && e.range.getColumn() == 
26) {
    // Copy selected row to another sheet
    var targetSheet = 
SpreadsheetApp.getActive().getSheetByName('July2019');
    var copyColumns = [15, 24];  // Column indices start with 1
    if (e.range.getValue() == 'Yes') {
      var row = e.range.getRow(), 
          targetData = [];
      var rowData = e.range.offset(0, 0, 1, 
    ss.getDataRange().getLastColumn()).getValues()[0];
      for (var i in rowData) {
        if (copyColumns.indexOf(parseInt(i) + 1) > -1) {
          targetData.push(rowData[i]);
        } else {
          targetData.push('');
        }
      }
      while (targetData[targetData.length - 1] == '') 
targetData.pop();
      Logger.log(rowData);
      Logger.log(targetData);
      row = targetSheet.getDataRange().getLastRow() + 1;
      targetSheet.getRange(row, 1, 1, 
targetData.length).setValues([targetData]);
    }
  }
}

非常感谢所有帮助 最好, J

1 个答案:

答案 0 :(得分:1)

onEdit(e)触发器runs automatically when you change the value of any cell in the spreadsheet

传递给函数的e值是一个事件对象,它提供函数信息以便可以响应。在这种情况下,event object将包含在{authMode=LIMITED, range=Range, source=Spreadsheet, user=username@domain.com, value=updatedvalue}中,您可以查看是否在Logger.log(e)函数中运行了onEdit(e)

您似乎正在尝试过度设计此问题。实际上,您需要做的就是获取下拉列表正在编辑的行的值,并将相应的OX单元格复制到July2019工作表:

function obtainFirstBlankRow() {  

  var sheet = SpreadsheetApp.getActive().getSheetByName('July2019');
  // search for first blank row
  var col = sheet.getRange('A:A');
  var vals = col.getValues();
  var count = 0;

  while (vals[count][0] != "") {
    count++;
  }
  return count + 1;
}

function onEdit(e) {
  var ss = SpreadsheetApp.getActiveSheet();

  if (ss.getName() == 'ProspectiveSites' && e.range.getColumn() == 26) {

    if (e.range.getValue() != 'Yes'){
      return;
    }

    var sourceSheet = SpreadsheetApp.getActive().getSheetByName('ProspectiveSites');
    var targetSheet = SpreadsheetApp.getActive().getSheetByName('July2019');

    var cell15 = sourceSheet.getRange('O' + e.range.getRow() + ':O' + e.range.getRow()).getValue();
    var cell24 = sourceSheet.getRange('X' + e.range.getRow() + ':X' + e.range.getRow()).getValue();

    var row = obtainFirstBlankRow();    
    targetSheet.getRange(row, 1).setValue(cell15);
    targetSheet.getRange(row, 2).setValue(cell24);
  }
}