How to define global variable in Google Apps Script

后端 未结 6 2027
梦如初夏
梦如初夏 2020-11-30 03:23

I see most examples from Google is they use only functions in a single giant script.

e.g. https://developers.google.com/apps-script/quickstart/macros

But in

相关标签:
6条回答
  • 2020-11-30 04:06
        var userProperties = PropertiesService.getUserProperties();
    
    
    function globalSetting(){
      //creating an array
      userProperties.setProperty('gemployeeName',"Rajendra Barge");
      userProperties.setProperty('gemployeeMobile',"9822082320");
      userProperties.setProperty('gemployeeEmail'," rajbarge@hotmail.com");
      userProperties.setProperty('gemployeeLastlogin',"03/10/2020");
      
      
      
    }
    
    
    var userProperties = PropertiesService.getUserProperties();
    function showUserForm(){
    
      var templete = HtmlService.createTemplateFromFile("userForm");
      
      var html = templete.evaluate();
      html.setTitle("Customer Data");
      SpreadsheetApp.getUi().showSidebar(html);
    
    
    }
    
    function appendData(data){
     globalSetting();
     
      var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Data");
      ws.appendRow([data.date,
                    data.name,
                    data.Kindlyattention,
                    data.senderName,
                    data.customereMail,
                    userProperties.getProperty('gemployeeName'),
                    ,
                    ,
                    data.paymentTerms,
                    ,
                    userProperties.getProperty('gemployeeMobile'),
                    userProperties.getProperty('gemployeeEmail'),
                    Utilities.formatDate(new Date(), "GMT+05:30", "dd-MM-yyyy HH:mm:ss")
                    
                    
      ]);
      
    }
    
    function errorMessage(){
    
    Browser.msgBox("! All fields are mandetory");
    
    }
    
    0 讨论(0)
  • 2020-11-30 04:12

    I use this: if you declare var x = 0; before the functions declarations, the variable works for all the code files, but the variable will be declare every time that you edit a cell in the spreadsheet

    0 讨论(0)
  • 2020-11-30 04:17

    Global variables certainly do exist in GAS, but you must understand the client/server relationship of the environment in order to use them correctly - please see this question: Global variables in Google Script (spreadsheet)

    However this is not the problem with your code; the documentation indicates that the function to be executed by the menu must be supplied to the method as a string, right now you are supplying the output of the function: https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet#addMenu%28String,Object%29

    function MainMenu_Init() {
        Logger.log('init');  
    };
    
    function onOpen() {
        var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
        var menus = [{
            name: "Init",
            functionName: "MainMenu_Init"
        }];
        spreadsheet.addMenu("Test", menus);
    };
    
    0 讨论(0)
  • 2020-11-30 04:17

    I'm using a workaround by returning a function with an object of my global variables:

    function globalVariables(){
      var variables = {
        sheetName: 'Sheet1',
        variable1: 1,
        variable2: 2
      };
      return variables;
    }
    
    function functionThatUsesVariable (){
      var sheet =   SpreadsheetApp.getActiveSpreadsheet().getSheetByName(globalVariables().sheetName);
    }
    
    0 讨论(0)
  • 2020-11-30 04:19

    In GAS global variables are not what they are in other languages. They are not constants nor variables available in all routines.

    I thought I could use global variables for consistency amongst functions and efficiency as well. But I was wrong as pointed out by some people here at SO.

    Global variable will be evaluated at each execution of a script, so not just once every time you run your application.
    Global variables CAN be changed in a script (so they are not constants that cannot be changed by accident), but will be reinitialized when another script will be invoked.
    There is also a speed penalty on using global variables. If within a function you use the same global variable two or more times, it will be faster to assign a local variable and use that instead.

    If you want to preserve variables between all functions in your application, it might be using a cacheService will be best. I found out that looping through all files and folders on a drive takes a LOT of time. But you can store info about files and folders within cache (or even properties) and speed up at least 100 times.

    The only way I use global variables now is for some prefixes and for naming widgets.

    0 讨论(0)
  • 2020-11-30 04:28

    You might be better off using the Properties Service as you can use these as a kind of persistent global variable.

    click 'file > project properties > project properties' to set a key value, or you can use

    PropertiesService.getScriptProperties().setProperty('mykey', 'myvalue');
    

    The data can be retrieved with

    var myvalue = PropertiesService.getScriptProperties().getProperty('mykey');

    0 讨论(0)
提交回复
热议问题