首页 文章

GoogleSheet Script单元格值设置

提问于
浏览
0

在Google工作表脚本中,我正在尝试将值从工作表A中的一个单元格复制到工作表B中的另一个单元格 .

问题是,当我在谷歌表脚本编辑器中启动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?

1 回答

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

相关问题