Google Apps Script无法进入自定义函数且执行超时问题咨询
问题描述
Google Apps Script似乎无法进入函数执行。日志显示函数前的所有变量都已完成初始化,说明自定义函数本身是可运行的,且一小时前测试该自定义函数还能正常工作。
我还有其他包含函数的脚本文件,其中唯一的全局变量来自Spreadsheet.getActiveSpreadsheet()调用。
运行日志
7:40:47 PM Notice Execution started 7:40:48 PM Info Mapped named ranges. 7:40:51 PM Info Initialized SyncData variables... 7:46:47 PM Error Exceeded maximum execution time
测试函数代码
代码仅用于测试自定义函数,目标是测试批量获取所有命名范围的函数,替代逐个获取的方式。
/**** retrieve settings ******/ //const DataSourceRange = ranges.get("DataSourceRange").getValue(); let ranges = mapNamedRanges(thisSpreadSheet.getNamedRanges()); const TrackerHeaderRow = ranges.get('TrackerHeaderRow').getRange().getValue(); const firstRowTrackerData = TrackerHeaderRow + 1; const FirstColHeaderName = ranges.get("FirstColHeaderName").getRange().getValue(); /**** setting up sheets ******/ const TrackerSheetName = ranges.get("TrackerSheetName").getRange().getValue(); const QuerySheetName = ranges.get("QuerySheetNameSetting").getRange().getValue(); const trackerSheet = thisSpreadSheet.getSheetByName(TrackerSheetName); const querySheet = thisSpreadSheet.getSheetByName(QuerySheetName); Logger.log('Initialized SyncData variables...') function testRange(){ Logger.log('Testing ranges mapping'); let ranges1 = mapNamedRanges(thisSpreadSheet.getNamedRanges()); Logger.log('ranges len = ' + ranges.size); //Logger.log(ranges1); const trackerSheetNameRange = ranges1.get('TrackerSheetName').getRange(); Logger.log(trackerSheetNameRange.getValue()); //testing for sheets Logger.log('Testing sheets mapping'); const sheets = thisSpreadSheet.getSheets(); const sheet = mapSheetNames(sheets); Logger.log('sheet sample: ' + sheet.get("SLI Tracker")); for( var i in sheets ) { Logger.log('sheet: '+ sheets[i]); } }
自定义工具函数代码
/** * @param {Array} namedRangesArray - requires a multidimensional array consisting the properties and content of the namedRange * @return {Map} returns a keyed/mapped array */ function mapNamedRanges(namedRangesArray) { let map = new Map(); //Logger.log('namedRanges length: ' + namedRangesArray.length); for (i=0; i < namedRangesArray.length; i++){ map.set(namedRangesArray[i].getName(),namedRangesArray[i]); //key, value } Logger.log('Mapped named ranges.'); return map; } /** * @param {Array} sheetsArray - an array of sheets * @return {Map} returns a keyed/mapped array */ function mapSheetNames(sheetsArray) { let map = new Map(); for (i=0; i < sheetsArray.length; i++){ map.set(sheetsArray[i].getName(),sheetsArray[i]); //key, value } return map; }
onOpen触发函数异常说明
onOpen()函数似乎也一直在运行无响应。
onOpen触发函数代码如下:
function onAppOpen() { const ui = SpreadsheetApp.getUi(); ui.createMenu('⚙️ SLI Tools') .addSubMenu (ui.createMenu('Tracker') .addItem('↺ Refresh data', 'refreshDataToTrackerAlert') .addItem('⇧ Upload changes', 'uploadChangesAlert') .addItem('⇧ Upload ALL rows', 'uploadAllChangesAlert') .addSeparator() .addItem('✕ Clear data', 'clearDataAlert') ) .addSubMenu(ui.createMenu('Billing') .addItem('⇩ Export to PDF', 'printToPdf') .addSeparator() .addItem('🖌 Format tables', 'formatDataTable') ) .addSubMenu(ui.createMenu('Uploader') .addItem('⇧ Upload new JO', 'uploadDataToSourceAlert') .addSeparator() .addItem('✕ Clear data', 'clearUploaderDataAlert') ) .addSeparator() .addSubMenu(ui.createMenu('Data') .addItem('↺ Refresh background query', 'refreshQueryAlert') ) .addToUi(); }
表格重载说明
表格本身也似乎一直在重载,以下截图证明文件网络连接正常无断连情况。

更新1
目前脚本曾短暂恢复正常,请问是否可能是GAS服务器故障导致该问题?
更新2
本次测试所用函数代码未做任何修改,最近两次成功运行平均耗时19秒,但数分钟后脚本又再次卡住。
Chrome浏览器未跑满CPU,仅打开4个标签页,内存占用处于合理水平。
内容的提问来源于stack exchange,提问作者plaridel1
相关产品推荐
相关产品推荐

