2017-05-10 3 views
0

In Google Blättern Script Einstellung, ich versuche Wert kopieren von einer Zelle in Blatt A zu einer anderen Zelle in Blatt B.GoogleSheet Script Zellenwert

Die Probleme ist, wenn ich avgUtilisationPerWeek() Funktion in Google starten Sheets Script Editor, der Code macht den Job, er setzt die Werte der Zellen so wie sie definiert sind.

Aber wenn ich die Funktion aus dem Zielblatt mit formula = avgUtilisationPerWeek() aufrufen, meldet es #FError "Sie sind nicht berechtigt, setValue aufzurufen (Zeile 108)."

In der benutzerdefinierten Funktion versuche ich, den Wert anderer Zellen im Blatt, nicht nur die Zelle, in der die Formel platziert ist.

Dies ist der Quellcode:

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); 
    } 
} 

ich diesen Artikel gelesen, aber knapp über die Lösung finden.

Google Script setValue permission

Transferring cell data in Google Script?

Antwort

0

Ich glaube nicht, Sie in der Lage sein, es wird von dem Blatt zu starten - es sei denn, ich bin falsch. Was für Sie arbeiten sollte, ist das Erstellen einer separaten Funktion für Open(), um ein benutzerdefiniertes Menü zu erhalten, mit dem Sie Ihre Funktion direkt vom Blatt aus ausführen können. Würde das Folgende für Sie funktionieren?

unter Ausführlich:

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

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

    SpreadsheetApp.flush();  
} 

Ihr Code das gleiche unten ist, aber ich gereinigt es nur ein bisschen für meine eigene Visualisierung oben, dann ist es optional, dies zu tun.

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

Wenn ich Code der onOpen Funktion im Script-Editor gesetzt und die Funktion in dem Blatt mit = onOpen() ausführen, erhalte ich die Meldung „SpreadsheetApp.getUi nicht() aufrufen können aus diesem Zusammenhang. (Line 16). " –

+0

Sie sollten es aus dem Menü ausführen können - onOpen() erstellt ein Menü neben dem Rest der Benutzeroberfläche. – David

Verwandte Themen