简体   繁体   中英

Google Apps Script Execution API: Script error message: Script function not found:【JavaScript】

I am an absolute beginner of web development. I would like to implement Google Apps Script Execution API into my project.

I have two questions on Google Apps Script Execution API to ask.

(1) I have no idea how to solve the error below.

Script error message: Script function not found: make_date_array(month)

Although my Google Apps Script has the function 'make_date_array(month)' in it, the error above comes out when I call google apps execution api. So I just don't know what to do.

function send_mail() {
   var date = new Date()
   date.setDate(new Date().getDate())
   date = date.getFullYear() + "-" + zero_padding(date.getMonth() + 1)
   runSingleRowQuery(0, date)
   var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
   var sheet = spreadsheet.getSheetByName("Data");
   var message = "";
   var tmp_message = sheet.getRange(1,1,58 ,2).getValues();

   for(var i = 0;i < tmp_message.length ;i++){
     message +=  tmp_message[i][0] + ":" + tmp_message[i][1] + "<br>"
   }

   MailApp.sendEmail({
       to: 'I put my email address here'
       subject: 'BigQuery',
       htmlBody: message
   });    
} 

function runSingleRowQuery(develop_mode, target_month) {
    // Replace this value with the project ID listed in the Google
    // Developers Console project.
    var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
    var queries_sheet = spreadsheet.getSheetByName("Single row queries");
    var result_sheet = spreadsheet.getSheetByName("Data");

    if(target_month == null){
       var target_month = queries_sheet.getRange(1, 2).getValue();
    }
    make_date_array(target_month);

    result_sheet.getRange(1, 2).setValue(queries_sheet.getRange(1, 2).getValue())
    for (var i = 2; i <= queries_sheet.getLastRow(); i++) {
        var query = queries_sheet.getRange(i, 2).getValue();
        if (query_variation(query) != false) {
            query = query_variation(query)

           Logger.log(queries_sheet.getRange(i, 1).getValue());
           Logger.log("# run query: \n " + query);

        if (develop_mode != 1) {
            Logger.log('\n#####################Run Query#########################');
            var request = {
                query: query
            };
            var queryResults = BigQuery.Jobs.query(request, projectId);
            var jobId = queryResults.jobReference.jobId;

            // Check on status of the Query Job.
            var sleepTimeMs = 500;
            while (!queryResults.jobComplete) {
                Utilities.sleep(sleepTimeMs);
                sleepTimeMs *= 2;
                queryResults = BigQuery.Jobs.getQueryResults(projectId, jobId);
            }

            // Get all the rows of results.
            var rows = queryResults.rows;
            while (queryResults.pageToken) {
                queryResults = BigQuery.Jobs.getQueryResults(projectId, jobId, {
                    pageToken: queryResults.pageToken
                });
                rows = rows.concat(queryResults.rows);
            }
            result_sheet.getRange(i, 2).setValue(rows[0].f[0].v);

            result_sheet.getRange(i, 1).setValue(queries_sheet.getRange(i, 1).getValue());
            result_sheet.getRange(i, 3).setValue(queries_sheet.getRange(i, 3).getValue());
        }
    }
    else {
        result_sheet.getRange(i, 1).setValue(queries_sheet.getRange(i, 1).getValue());
        result_sheet.getRange(i, 2).setValue(queries_sheet.getRange(i, 2).getFormula());
         }
    }
 }

function make_date_array(month) {
    month = month.split('-');
    var last_month = {};
    var more_last_month = {};
    Logger.log((parseFloat(month[0] - 1).toFixed(0)))
    if (parseFloat(month[1] - 1).toFixed(0) < 1) {
        last_month[0] = (parseFloat(month[0]) - 1).toFixed(0);
        last_month[1] = 12;
    } else {
        last_month[0] = (parseFloat(month[0])).toFixed(0);
        last_month[1] = (parseFloat(month[1]) - 1).toFixed(0);
    }
    if (last_month[1] < 10) {
        last_month[1] = '0' + last_month[1];
    }

    if (parseFloat(last_month[1] - 1).toFixed(0) < 1) {
        more_last_month[0] = (parseFloat(last_month[0]) - 1).toFixed(0);
        more_last_month[1] = 12;
    } else {
        more_last_month[0] = (parseFloat(last_month[0])).toFixed(0);
        more_last_month[1] = (parseFloat(last_month[1]) - 1).toFixed(0);
    }
    if (more_last_month[1] < 10) {
        more_last_month[1] = '0' + more_last_month[1];
    }

    date_array['Ym01'] = month[0] + month[1] + '01';
    date_array['last_Ym01'] = last_month[0] + last_month[1] + '01';
    date_array['more_last_Ym01'] = more_last_month[0] + more_last_month[1] + '01';
    date_array['y-m-10_h:s'] = month[0] + '-' + month[1] + '-' + '10 00:00';
    date_array['last_y-m-10_h:s'] = last_month[0] + '-' + last_month[1] + '-' + '10 00:00';
    date_array['more_last_y-m-10_h:s'] = more_last_month[0] + '-' + more_last_month[1] + '-' + '01 00:00';
    date_array['y-m-10'] = month[0] + '-' + month[1] + '-' + '10';
    date_array['last_y-m-10'] = last_month[0] + '-' + last_month[1] + '-' + '10';

    Logger.log(date_array['last_y-m-10'])
}

(2) Does anyone know how I am supposed to call multiple functions? I used the sample code provided by Google. However, I am not sure if I follow the right way to call several functions.

// Create an execution request object.
    var request = {
        'function': 'send_mail',
        'function': 'runSingleRowQuery(develop_mode, target_month)',
        'function': 'make_date_array(month)',
        };

If you have had similar problems before, could you please help deal with the two issues above? English is not my first language, so if this post does not make sense to you or need more information, please leave your comments. Any advise would be appreciated. Thanks in advance.

In additional to link in the comment I think this code

if(target_month == null){
       var target_month = queries_sheet.getRange(1, 2).getValue();
    }

You have to change to (no var)

 if(target_month == null){
       target_month = queries_sheet.getRange(1, 2).getValue();
    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM