2017-05-10 12 views
0

시도하고 설정을 시트 스크립트 편집기, 코드가 일을하고있다, 그것은 정의 된대로 세포의 가치를 설정합니다.GoogleSheet 스크립트 셀 값, 나는 시트 B에 다른 셀에 시트 (A)에 하나 개의 셀에서 구글의</p> <p>문제점이다, 나는 avgUtilisationPerWeek를 시작할 때() 함수 값을 복사하는 구글 시트 스크립트에서

하지만 수식 = avgUtilisationPerWeek()을 사용하여 대상 시트에서 함수를 호출하면 #ERROR "setValue (라인 108) 호출 권한이 없습니다."라는 메시지가 표시됩니다.

사용자 지정 함수에서 수식이있는 셀뿐만 아니라 시트의 다른 셀의 값을 설정하려고합니다.

는 소스 코드입니다

function avgUtilisationPerWeek(){ 
    for(var i = 1; i < 14; i++) { 
     Utilities.sleep(3000); 
     SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Dynamic Weekly Utilisation Report').getRange('D1').setValue(i); 
     t1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Dynamic Weekly Utilisation Report').getRange('L4').getValue(); 
     SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Graph Q1 2017').getRange((String.fromCharCode('A'.charCodeAt(0) + i)).concat('24')).setValue(t1); 

     v = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Dynamic Weekly Utilisation Report').getRange('L5').getValue(); 
     SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Graph Q1 2017').getRange((String.fromCharCode('A'.charCodeAt(0) + i)).concat('29')).setValue(v); 

     g = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Dynamic Weekly Utilisation Report').getRange('L6').getValue(); 
     SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Graph Q1 2017').getRange((String.fromCharCode('A'.charCodeAt(0) + i)).concat('34')).setValue(g); 

     t2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Dynamic Weekly Utilisation Report').getRange('L7').getValue(); 
     SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Graph Q1 2017').getRange((String.fromCharCode('A'.charCodeAt(0) + i)).concat('39')).setValue(t2); 
    } 
} 

나는이 기사를 읽을 수 있지만 해결책을 찾을 수 didnt한다.

Google Script setValue permission

Transferring cell data in Google Script?

답변

0

은 당신이 시트에서 그것을 실행할 수 있습니다 생각하지 않는다 - 내가 틀렸다하지 않는. 무엇이 당신을 위해 작동해야한다 별도의 함수를 onOpen() 시트에서 바로 기능을 실행할 수있는 사용자 정의 메뉴를 얻을 수 있습니다. 당신을 위해 다음과 같은 것이 효과가 있습니까?

아래 상세 :

function onOpen() { 
var ui = SpreadsheetApp.getUi(); 

    ui.createMenu('Custom Functions') 
     .addItem('Copy Function', 'avgUtilisationPerWeek') 
     .addToUi(); 

    SpreadsheetApp.flush();  
} 

귀하의 코드는 다음과 동일하지만 난 그냥 내 자신의 시각화 목적을 위해 약간 그것을 청소, 그것은이 일을 선택합니다.

function avgUtilisationPerWeek(){ 

    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet1 = ss.getSheetByName('Dynamic Weekly Utilisation Report'); 
    var sheet2 = ss.getSheetByName('Graph Q1 2017'); 

    for(var i = 1; i < 14; i++) { 
    Utilities.sleep(3000); 

    sheet1.getRange('D1').setValue(i); 
    t1 = sheet1.getRange('L4').getValue(); 
    sheet2.getRange((String.fromCharCode('A'.charCodeAt(0) + i)).concat('24')).setValue(t1); 

    v = sheet1.getRange('L5').getValue(); 
    sheet2.getRange((String.fromCharCode('A'.charCodeAt(0) + i)).concat('29')).setValue(v); 

    g = sheet1.getRange('L6').getValue(); 
    sheet2.getRange((String.fromCharCode('A'.charCodeAt(0) + i)).concat('34')).setValue(g); 

    t2 = sheet1.getRange('L7').getValue(); 
    sheet2.getRange((String.fromCharCode('A'.charCodeAt(0) + i)).concat('39')).setValue(t2); 
    } 
} 
+0

내가 스크립트 편집기에서으로 onOpen 기능의 코드를 넣어 =으로 onOpen(), 나는이 상황에서 SpreadsheetApp.getUi()를 호출 할 수 없습니다 "메시지를 수신와 시트의 기능을 실행합니다. (라인 16). " –

+0

메뉴에서 실행할 수 있어야합니다 - onOpen()은 나머지 UI 옆에 메뉴를 생성합니다. – David