0

这是我的第二个问题,因为第一个问题由 patt0 解决,谢谢!

我有一个编辑工作脚本,每次编辑工作表时都会检查,如果列号的任何单元格的值。7 更改为“RECEBER”,它将整行拉到另一张纸上。起初,我认为这对我有用,但很快发现 onEdit 有一些与我想做的不兼容的限制。

因为我不能依赖 onEdit,所以我想随时从创建的菜单(如 patt0 所建议的)运行脚本。这可以一次完成,对整个电子表格,也可以逐张完成(我相信两者的解决方案都是相似的,两种方式对我来说都非常方便)。

这是我拥有的代码(不工作 - 改编自之前的编辑代码):

第一部分存储工作表名称以检查它是否在 1 到 31 之间;

function mustBeCopied(sheetName) {
  var sheetNumber = parseInt(sheetName);
  if (sheetNumber <=31 && sheetNumber >=1)
    return true;
  return false;
}

这第二部分可能是一些问题,因为它来自 onEdit 功能。

function RECEBER() {
  var ss = SpreadsheetApp.getActiveSpreadsheet(); // stores the active spreadsheet (where the script is being ran)
  var s = ss.getActiveSheet(); // stores the Active sheet within the stored spreadsheet
  var r = ss.getActiveRange(); // stores the range of rows in my document ?
  if(mustBeCopied(s.getName()) && r.getColumn() == 7 && r.getValue() == "RECEBER") { // if mustBeCopied, when applied to the sheet defined in the s variable is satisfied, it will check on every row if the value "RECEBER" is in its 7th column.
    var row = r.getRow(); // stores the row that satisfied the condition
    var numColumns = s.getLastColumn(); // stores the last column on the sheet ?
    var targetSheet = s.getSheetByName("money"); // sets the target sheet
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1); // gets range on the target sheet and adds one more row for the new data to be inserted
    s.getRange(row, 1, 1, numColumns).copyTo(target); // writes the data into the target sheet, but I don't understand how..
  }
}

我正在逐步分析,看看我是否理解正在发生的事情。

我确信这可以很容易地完成,并且愿意学习,但我似乎无法在网上找到解决方案。我认为这已经是一个讨论的主题。如果我可以自动执行此操作,每个月都会为我节省很多时间。它还将降低人为错误的风险,因为它将由计算机处理。

我希望有人可以帮助我.. 谢谢。

4

1 回答 1

0

您有执行记录(查看 -> 执行记录)来观察执行堆栈(任何错误都会出现)。

以下代码可能会有所帮助:

/* CODE FOR DEMONSTRATION PURPOSES */
function onEdit(e) {
  var targetSheet = e.source.getSheetByName('money'), 
      range = e.range,
      s = range.getSheet(),
      lastColumn = s.getLastColumn();
  if (mustBeCopied(s.getName()) && range.getColumn() === 7 && e.value === 'RECEBER')
    s.getRange(range.getRow(), 1, 1, lastColumn).copyTo(targetSheet.getRange(targetSheet.getLastRow() + 1, 1, 1, lastColumn));
}

根据需要进行调整。

于 2013-10-12T20:25:34.823 回答