2013-01-16 4 views
0

스크립트 편집기 : onOpen 함수 (아래 참조)를 사용하여 스크립트를 작성했습니다. 스크립트 편집기로 시작하면 제대로 작동합니다. 스프레드 시트가 열릴 때 시작되면 stmt 31 "Logger.log (name)"의 로그가 표시됩니다. 왜? 다른 스크립트와 스크립트 편집기 취급에서 onOpen를 실행onOpen 함수가 올바르게 작동하지 않습니다.

function onOpen() { 
    n0="T22 "; 
    n1=n0+"aktuell" 
    n2=n0+"Master" 
    var y1=DayShift(); 
    Browser.msgBox("Returned with "+y1); 
}; 

function DayShift() { 
    var dt=Browser.inputBox("Datum (YYMMDD) eingeben"); 
    if (dt=="cancel" || dt.length !=6) return("Input "+dt); 

    var f1=GetFL(n1,0); 
    if (f1=="cancel") return("F1 cancel"); 
    Logger.log(f1); 
    var Rx=f1.getSheetByName("Sheet1").getRange("B9").getValue(); 
    f1.rename(n0+dt); 
    Logger.log(Rx); 
    Logger.log(f1.getName()+" finished"); 

    var f2=GetFL(n2,1); 
    if (f2=="cancel") return("F2 cancel"); 
    Logger.log(f2); 
    f2.getSheetByName("Sheet1").getRange("B7").setValue(Rx); 
    Logger.log(f1.getName()+" finished"); 

    return("OK"); 
}; 

function GetFL(name,typ) { 
    Logger.log(name); 
    var fx = DocsList.find(name); 
    Logger.log(name+" = "+fx.length); 
    if (fx.length != 1) return("cancel"); 
    if (typ==1) { 
    var fy=fx[0].makeCopy(n1); 
    } else { 
    var fy=fx[0]; 
    }; 
    fy=SpreadsheetApp.openById(fy.getId()); 
    Logger.log(fy); 
    return (fy); 
}; 
+0

무엇이 질문입니까? – simonmorley

+1

코드에 주석을 달아보십시오. 당신이 그것을 이해하는 데 도움이 될 수 있습니다. – ScampMichael

+0

여기에 ScampMichael에 동의합니다. 그러나 이것에 대한 대답은 그것이하고있는 일에 대한 이해가 필요하지 않습니다. – Jonathon

답변

0

:

여기에 전체 스크립트입니다. 익명으로 실행할 수 없으므로 간단한 트리거 기능으로 실행하면 DocsList API에 대한 액세스가 허용되지 않습니다. 스크립트를 실행하도록 승인 한 경우에도 간단한 트리거는 익명으로 실행되며 특정 API는이를 허용하지 않습니다.

이 경우 onOpen (및 onEdit)가 자동으로 실행되지 않습니다.

이 문제는 해결되지 않지만 설명은 GAS documentation에서 찾을 수 있습니다.

처음 만났을 때 좌절하거나 신비가 있지만 메뉴 명령이나 버튼에서 스크립트를 실행한다고해도 주변에는 여러 가지 방법이 있습니다. 둘 다 스크립트의 사용자 신원을 제공합니다.

2

Jonathon의 답을 보완하기 위해 단순한 대신에 설치 가능한 onOpen 트리거를 사용할 수 있습니다. 예를 들어, IonOpen() 또는 기타 ... 설치 가능한 트리거에는 Jonathon이 언급 한 제한이 없습니다. Using Container-Specific Installable Triggers에 문의하십시오.

관련 문제