2017-05-10 47 views
0

在谷歌片腳本,我試圖從一個小區在手冊A複製值到另一個小區在片材B.GoogleSheet腳本細胞值設定

存在的問題是,當我開始avgUtilisationPerWeek()在谷歌功能工作表腳本編輯器,代碼正在完成這項工作,它將定義單元格的值。

但是當我使用formula = 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); 
    } 
} 

我看了這個文章,但沒有找到解決方案。

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