我不断收到此错误“找不到脚本函数: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}}”从电子表格(请检查下面链接的图像)。当尝试重现此内容时,请忽略学生详细信息部分,只注意赞助商详细信息部分,这是重要的部分。
我也有同样的问题。我发现如果在将脚本分配给按钮时包含括号,则会出现此错误。不允许使用参数。
错误信息应该更清楚。