如何修复 Google Apps 脚本中的“找不到脚本函数”错误?

问题描述 投票:0回答:1

我不断收到此错误“找不到脚本函数:generateDocument(“Mickeys Bakery”,“Tennis”)”但是该函数可以工作,这就是它的定义方式:

function generateDocument(sponsorName, programName)

上面的函数是在自定义按钮中调用的,按钮有一个包含赞助商名称的下拉菜单,这些名称下面是程序名称,因此当我单击米奇面包店下的网球时,按钮应该使用上面的变量运行该函数。这就是代码的样子:

var SPONSORS = []; // Initialize empty sponsors array
const SPREADSHEET_ID = 'sheet_id';
const TEMPLATE_DOC_ID = 'doc_id';
const flaggedStudentsSheet = SpreadsheetApp.openById(SPREADSHEET_ID).getSheetByName('Students');
const sponsorsSheet = SpreadsheetApp.openById(SPREADSHEET_ID).getSheetByName('Sponsors');

// Function to fetch the list of sponsors and their sponsored programs
function fetchSponsorsList() {
    try {
        var sponsorsSheet = SpreadsheetApp.openById(SPREADSHEET_ID).getSheetByName('Sponsors');

        // Get data from the Sponsors sheet
        var dataRange = sponsorsSheet.getDataRange();
        var values = dataRange.getValues();

        // Initialize an empty array to hold sponsors and their programmes
        var sponsorsData = [];

        // Loop through the data to fetch sponsors and their programmes
        for (var i = 1; i < values.length; i++) {
            var sponsor = values[i][1]; // Assuming sponsor name is in the second column
            var sponsoredProgrammes = values[i][2].split(", "); // Assuming sponsored programmes are in the third column

            // Push an object containing sponsor name and their sponsored programmes to the array
            sponsorsData.push({ sponsor: sponsor, sponsoredProgrammes: sponsoredProgrammes });
        }

        // Update the SPONSORS list with the fetched data
        SPONSORS = sponsorsData;

        Logger.log("Sponsors list and sponsored programmes fetched successfully.");
    } catch (error) {
        Logger.log("Error fetching sponsors list and sponsored programmes: " + error.toString());
    }
}

// Function to generate a document based on the selected sponsor and program
function generateDocument(sponsorName, programName) {
    try {
        // Get data from the first row of Flagged Students sheet
        var data = flaggedStudentsSheet.getRange(2, 1, 1, flaggedStudentsSheet.getLastColumn()).getValues()[0];
        
        // Sponsor Details
        body.replaceText('{{s}}', sponsorName); // Sponsor name
        body.replaceText('{{p}}', programName); // Programme name

        // Student Details
        body.replaceText('{{name}}', data[1]); // Student Name
        body.replaceText('{{team_coach}}', data[2]); 
        body.replaceText('{{sport}', data[18]);
        body.replaceText('{{team_performance}}', data[15])
        body.replaceText('{{attendance}}', data[14]);

        Logger.log('Document created successfully.');
    } catch (e) {
        Logger.log('Error: ' + e.toString());
    }
}

// Function to create a sponsor selection menu in the UI
function sponsorButton() {
    const ui = DocumentApp.getUi();
    const sponsorsMenu = ui.createMenu('Select A Sponsor');

    // Add submenus for each sponsor
    SPONSORS.forEach(function(sponsorData) {
        const sponsor = sponsorData.sponsor;
        const sponsoredProgrammes = sponsorData.sponsoredProgrammes;

        const sponsorSubMenu = ui.createMenu(sponsor);

        // Add submenu items for each sponsored programme
        sponsoredProgrammes.forEach(function(programme) {
            sponsorSubMenu.addItem(programme, 'generateDocument("' + sponsor + '", "' + programme + '")');
        });

        sponsorsMenu.addSubMenu(sponsorSubMenu);
    });

    // Add the sponsor menu to the UI
    sponsorsMenu.addToUi();
}

function onOpen() {
    fetchSponsorsList(); // Fetch sponsors list and 
    sponsorButton(); // Dropdown button
}

很少有事情是清楚的,功能

function generateDocument(sponsorName, programName)
存在,当我直接从应用程序脚本编辑器使用静态变量运行它时,它工作得很好,当我切换到不需要的不同功能时,按钮功能似乎可以工作参数,但是当它尝试调用有问题的函数时,我才会收到上面的错误。我不认为问题出在变量上,正如您从错误中看到的那样,该函数似乎从变量“米奇面包店”和“网球”的下拉列表中提取了正确的数据 该脚本附加到 Google 文档,上面的 template_doc_id 属于该文档,文档从上面的电子表格 ID 表示的 Google 工作表中获取数据,下面的图片是其中一张工作表的数据查找内容的示例。至于下拉按钮,它在菜单中包含赞助商名称,相应的程序名称构成每个赞助商的子菜单,该按钮位于文档上,单击时应该用详细信息填充所有占位符“{{s}}”从电子表格(请检查下面链接的图像)。当尝试重现此内容时,请忽略学生详细信息部分,只注意赞助商详细信息部分,这是重要的部分。

Sample of Sponsor Sheet

google-sheets google-apps-script google-docs
1个回答
0
投票

我也有同样的问题。我发现如果在将脚本分配给按钮时包含括号,则会出现此错误。不允许使用参数。

错误信息应该更清楚。

© www.soinside.com 2019 - 2024. All rights reserved.