2015-10-20 49 views
0

在我的Google工作表中有一个名为onOpen的函数,它将检查C列,如果C列中的值为已关闭,那么该行应移至下一页。时间触发不调用函数

当我直接编辑工作表时,此功能工作正常。问题是功能不起作用如果我使用AppSheet更新工作表,另外,时间触发器不会在Google工作表中运行。

function onOpen() { 

    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var s = ss.getActiveSheet(); 
    var r = s.getActiveRange(); 


    if (s.getName() == "Load Board" && r.getColumn() == 3 && r.getValue() == "Closed") { 
    var row = r.getRow(); 
    var numColumns = s.getLastColumn(); 
    var targetSheet = ss.getSheetByName("Closed"); 
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1); 
    s.getRange(row, 1, 1, numColumns).moveTo(target); 
    s.deleteRow(row); 
    } 

} 
+0

我认为这是因为'onOpen'事件只会在您打开Goog​​le表格中的工作表时发生。也许看看创建一个触发器,当对电子表格进行编辑时会触发该触发器?此外,你提到你的时间触发功能,但它看起来不像你发布时间触发功能 – Adjit

+0

@Adjit我试过onEdit,这将运行。但它只会在我直接编辑工作表时运行,而不是当我编辑第三方工作表时,如AppSheet –

+0

而您的时间驱动触发器不起作用?因为我知道你可以将它设置为每小时/每分钟触发一次 – Adjit

回答

0

我很难说出你是如何设置你的事件来触发的。

下面是我将如何设置一个简单的测试,以确保一切都按预期工作。

首先,在你的脚本连接到您的电子表格设置测试功能:

function timeDrivenTestFunction() { 
    var emailName = "Time Driven Admin"; 
    var replyTo = "[email protected]"; 
    var email = "[email protected]"; 
    var body = "Timestamp: " + Date.now(); 
    var subject = "Timestamp Test"; 

    var advancedArgs = { 
    name: emailName, 
    replyTo: replyTo, 
    to: email, 
    subject: subject, 
    htmlBody: body, 
    noReply: true 
    }; 

    var autoReplyErr = "Error in sending email message. No reply was sent"; 

    try { 
    MailApp.sendEmail(advancedArgs); 
    } catch (e) { 
    MailApp.sendEmail(errorEmail, autoReplyErr); 
    }  
} 

现在你有设置您可以添加触发器到您的项目。

步骤1 - 转到Current project's triggers

Go To Current Project's Triggers

第2步 - 添加一个新的触发

Add new trigger

步骤3 - 设置你的测试功能来运行作为时间驱动的事件每分钟。然后点击通知给您带来第4步

Set function to run and notifications

步骤4 - 设置错误通知,因此,如果函数无法执行它会发送您的Gmail电子邮件,告诉您函数未能执行,也将说明为什么没有执行的原因

enter image description here

步骤5(即它会给你某种错误信息。) - 点击OK,然后等待几分钟让它启动。它应该运行良好,您可能需要在电子表格中设置权限,以便Google文档可以访问您的Gmail并发送电子邮件。