【发布时间】:2017-11-14 14:09:16
【问题描述】:
嘿嘿! 我有一个应该在编辑时触发的脚本。 onEdit() 作为一个简单的触发器对我来说不是一个选项,因为脚本需要授权。使用编辑器设置可安装触发器时,触发器仅在手动定义特定变量时触发,而不是在使用数组定义时触发。 由于我不知道问题可能出在哪里(我试图逐部分注释掉代码,但在进入最后一部分时它总是最终无法正常工作。
function myFunction() {
//Source Sheet for different sheets
var ss = SpreadsheetApp.getActiveSpreadsheet();
var activeSheet = ss.getActiveSheet();
var activeRange = ss.getActiveRange();
var activeRow = activeRange.getRowIndex();
var CategoryValues = ss.getSheetValues(activeRow, 4, 1, 14);
var ID = activeSheet.getRange(activeRow,2).getValue();
var red = '#e06666'
// Defining the sourceWeekNumber in the sourceSheet with a while loop
var sourceWeeks = activeSheet.getRange(1,1,activeRow).getValues();
sourceWeeks.reverse();
var sourceWeekColor = activeSheet.getRange(1,1,activeRow).getBackgrounds();
sourceWeekColor.reverse();
var sourceWeekNumber = [];
var sourceWeekIndex=1;
while (sourceWeekColor[sourceWeekIndex-1]!=red) {
if (sourceWeekColor[sourceWeekIndex]==red) {
sourceWeekNumber.push(sourceWeeks[sourceWeekIndex])
}
sourceWeekIndex++;
}
//Target sheet is always mastersheet
var ts = SpreadsheetApp.openById('ID').getSheetByName('mastersheet');
//Finding the right spot in mastesheet
//Validate the weeknumber
var validWeek = ts.getRange(2, 1, ts.getLastRow()).getValues();
var rowIndex = [];
//-----> var sourceWeekNumber = 'v50'; <-----
// When defining this variable manually, onEdit works fine.
// When defining sourceWeek with the while loop above, the onEdit does not trigger.
// Find the right week and it's row in the mastersheet
var validWeekIndex = 1;
while (validWeek[validWeekIndex] != sourceWeekNumber) {
if (validWeek[validWeekIndex] == sourceWeekNumber) {
var validID = ts.getRange(validWeekIndex+3,2, ts.getLastRow()).getValues();
rowIndex.push(validWeekIndex);
}
validWeekIndex++;
}
}
我尝试了不同的方法,总是使用 Logger.log() 或 Browser.msgBox() 来尝试识别问题。有什么想法或解决方法吗?我已经坚持了3天了,找不到任何解决方案。 我也准备了一个样本表,如果需要,我可以编辑它。 提前致谢!
编辑: 这是样本表的链接:https://docs.google.com/spreadsheets/d/1xCZur6gpfsQFPtwKcTl0XPPfG8zlTqGVlm1GZZ8X1xM/edit?usp=sharing
【问题讨论】:
-
代码的一个问题是您使用
range.getValues()调用填充的数组是二维的,但您将它们视为一维的。代码排序是有效的,因为您有 Nx1 数组——例如,它不适用于 Nx2。另外,执行脚本对被触发的脚本有什么看法?也许你应该分享样本表。 -
我现在已经添加了样品表链接。代码似乎工作正常,我知道一些缺陷可能会导致后期出现问题,但执行记录和日志都没有说明脚本被触发的任何内容。该脚本根本不运行。我启用了电子邮件通知,但也没有。
标签: google-apps-script google-sheets