javascript - Google Apps 脚本执行 API : Script error message: Script function not found:【JavaScript】

标签 javascript google-apps-script

我是网络开发的绝对初学者。 我想在我的项目中实现 Google Apps 脚本执行 API。

我有两个关于 Google Apps 脚本执行 API 的问题要问。

(1) 我不知道如何解决以下错误。

脚本错误消息:找不到脚本函数:make_date_array(month)

虽然我的 Google Apps 脚本中有函数“make_date_array(month)”,但当我调用 google appsexecution api 时,会出现上述错误。所以我只是不知道该怎么办。

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) 有谁知道我应该如何调用多个函数?我使用了谷歌提供的示例代码。但是,我不确定我是否遵循正确的方法来调用多个函数。

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

如果您以前遇到过类似的问题,能否帮忙解决以上两个问题?英语不是我的母语,所以如果这篇文章对您来说没有意义或需要更多信息,请留下您的评论。任何建议将不胜感激。提前致谢。

最佳答案

除了评论中的链接之外,我认为这段代码

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

你必须更改为(无var)

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

关于javascript - Google Apps 脚本执行 API : Script error message: Script function not found:【JavaScript】,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38824046/

相关文章:

javascript - 无法在 'removeChild' : parameter 1 is not of type 'Node' in javascript 上执行 'Node'

javascript - 将 .ogg blob 转换为 Google Drive 文件

javascript - 可以使用相同的触发器以不规则的时间间隔运行相同的功能吗?

javascript - 比较两列,如果匹配,则粘贴匹配值

google-apps-script - 驱动器中的 Apps 脚本抛出 "Sorry, unable to open the file at this time. Please check the address and try again"一周

javascript - 我可以即时更改移动版 Safari 中的视口(viewport)元标记吗?

javascript - 从 JSON 中选择

javascript - 在 Laravel 中将数据从一个 Vue.js 组件传递到另一个组件的最佳实践

javascript - 如何在react-native中重置IOS文件夹

google-apps-script - 如何使用谷歌应用程序脚本访问子文件夹?