这是我的第二个问题,因为第一个问题是由patt0解决的,谢谢!
我有一个编辑工作脚本,每次编辑工作表时都会检查,如果列的任何单元格的值为no。 7将更改为" RECEBER",它会将整行拉到另一张纸上。起初,我认为这对我有用,但很快就发现onEdit有一些与我想做的事情不兼容的限制。
由于我不能依赖onEdit,我想从我想要的时候创建的菜单(按照patt0的建议)运行脚本。这可以一次完成,整个spredsheet,也可以一页一页(我相信两者的解决方案将是相似的,两种方式对我来说都非常方便)。
这里是我的代码(不工作 - 改编自以前的编辑代码):
第一部分是存储工作表名称以检查它是否在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..
}
}
我正在逐步分析,看看我是否了解发生了什么......
我确信这可以很容易地完成,并且我很想学习,但我似乎无法在网上找到解决方案......我认为这已经是一个讨论的主题了。 如果我能自动完成这项工作,那么每个月我都会节省很多时间。它还可以降低人为错误的风险,因为它将由计算机处理..
我希望有人可以帮助我.. 感谢。
答案 0 :(得分:0)
你有执行记录(View - &gt; Execution transcript)来观察执行堆栈(任何错误都会在那里)。
以下代码可能会有所帮助:
/* 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));
}
根据需要进行调整。