简体   繁体   English

Google Apps脚本执行API:脚本错误消息:找不到脚本功能:【JavaScript】

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

I am an absolute beginner of web development. 我是Web开发的绝对初学者。 I would like to implement Google Apps Script Execution API into my project. 我想在我的项目中实现Google Apps Script Execution API。

I have two questions on Google Apps Script Execution API to ask. 关于Google Apps脚本执行API,我有两个问题要问。

(1) I have no idea how to solve the error below. (1)我不知道如何解决以下错误。

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. 尽管我的Google Apps脚本中包含函数“ make_date_array(month)”,但是当我调用google apps执行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? (2)有人知道我应该如何调用多个函数吗? I used the sample code provided by Google. 我使用了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) 您必须更改为(no var)

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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