Google表格onChange事件中getActiveSheet()始终返回首个工作表问题求助
问题
我需要在用户手动隐藏行时同步不同工作表的隐藏状态,于是创建了onChange事件触发器,但遇到了问题:getActiveSheet()始终返回第一个工作表。之前查到相关问题标记为已修复,但我这里仍出现该错误。我试过用SpreadsheetApp.getActiveSheet().getSheetName()等替代方法,结果还是一样,而且脚本已经绑定到表格了。
相关脚本
function balancer(e) { if(e.user == 'example@gmail.com'){ var currentSheetName = e.source.getActiveSheet().getSheetName(); Logger.log(currentSheetName) switch(currentSheetName) { case "Sheet1": Logger.log("1"); var currentSheetURL = 'https://docs.google.com/spreadsheets/d/1lQD783-rP6Rkvbgl0LJhcd2X6ld2x70UDi9qZ-vklQU/edit#gid=845762334'; var connectedSpreadsheetUrls = [ 'https://docs.google.com/spreadsheets/d/238uFufYiEboFwovMQ4k2C4etuSSTdhVV5mphHVzaVi0/edit#gid=380725117', ]; //onChangeTrigger(e, currentSheetName, currentSheetURL, connectedSpreadsheetUrls); break; case "Sheet2": Logger.log("2") var currentSheetURL = 'https://docs.google.com/spreadsheets/d/1lQHGBN-rP6RkpNUl0KLhcd2X6ld2x70UDi9qZ-vklQU/edit#gid=1253678902'; var connectedSpreadsheetUrls = [ 'https://docs.google.com/spreadsheets/d/1dEba7sTtBKmM2KJG1POIM7bxxWvuR_eLCIw7lXzv9T8/edit#gid=1301134732' ]; //onChangeTrigger(e, currentSheetName, currentSheetURL, connectedSpreadsheetUrls); break; default: Logger.log("Oh no") return; } } } function onChangeTrigger(e, originalSheetName, originalSpreadsheetUrl, connectedSpreadsheetUrls) { try { Logger.log(originalSheetName) var originalSpreadsheet = e.source var originalSheet = e.source.getSheetByName(originalSheetName) var originMatch = originalSpreadsheetUrl.match(/\/d\/([a-zA-Z0-9-_]+)\/edit#gid=(\d+)/); // Check if the event object and the source are defined if (e && originalSpreadsheet) { // Check if the edited sheet is the original sheet in the provided spreadsheet if (originalSpreadsheet.getId() == originMatch[1] && originalSpreadsheet.getSheetByName(originalSheetName).getSheetId() == originMatch[2]) { connectedSpreadsheetUrls.forEach(function(url) { var match = url.match(/\/d\/([a-zA-Z0-9-_]+)\/edit#gid=(\d+)/); if (match) { var connectedSpreadsheetId = match[1]; var connectedSheetGid = match[2]; var connectedSpreadsheet = SpreadsheetApp.openById(connectedSpreadsheetId); // Loop through sheets in the connected spreadsheet to find the one with the specified gid var connectedSheets = connectedSpreadsheet.getSheets(); var connectedSheet = null; for (var i = 0; i < connectedSheets.length; i++) { if (connectedSheets[i].getSheetId() == connectedSheetGid) { connectedSheet = connectedSheets[i]; break; } } if (connectedSheet) { try{ var hidden_rows = getHiddenAndFilteredRows(originalSheet) } catch(error1){ Logger.log("oops", error1) } if(hidden_rows.length > 0){ hidden_rows.forEach(row => { if (!connectedSheet.isRowHiddenByUser(row)){ connectedSheet.hideRows(row) } }) } var connected_sheet_hidden_rows = getHiddenAndFilteredRows(connectedSheet) if(connected_sheet_hidden_rows.length > 0){ connected_sheet_hidden_rows.forEach(row => { if (!originalSheet.isRowHiddenByUser(row)){ connectedSheet.showRows(row) } }) } } } }); } } } catch (error) { Logger.log('Error:', error.message); } } function getHiddenAndFilteredRows(sheet) { var data = sheet.getDataRange().getValues() var hiddenRows = [] for (var d = 0; d < data.length; d++) { // Row Index starts from 1 if (sheet.isRowHiddenByUser(d + 1)) { Logger.log('Row #' + d + ' is hidden - value: ' + data[d][0]); hiddenRows.push(d+1) continue; } } return hiddenRows }
内容的提问来源于stack exchange,提问作者Dat Nguyen
相关产品推荐
相关产品推荐

