我知道这已经晚了,并且可能不再对原始请求者有用。但是我在处理功能时看到了这个问题,但后来我自己解决了。您可以通过 gid 查找工作表,并且当您删除工作表时它不会更改这一事实是一件好事......如果您打算使用它。基本上我得到所有工作表,并遍历工作表名称和工作表 gid 直到 gid 匹配,然后我按名称调用工作表。
这是我用来从编辑聚合表中获取一行的一些代码的一部分,并作为双向同步的一部分推送到子表。如果您只存储了 gid 和密钥,则可以跳过我显示的步骤,只需引用这些值。它似乎工作得非常快,它是一个更复杂的脚本,然后从带有分解表的工作簿运行,但两个脚本几乎都需要 2 秒才能推送,这对我来说是可以接受的。
function Stest()
{
SpreadsheetApp.flush();
var sheet = SpreadsheetApp.getActiveSheet();
var r = sheet.getActiveRange();
var lastColumnRow = sheet.getLastColumn();
var activeRow = r.getRow();
var dataRange = sheet.getRange(activeRow,1,1,lastColumnRow);
var data = dataRange.getValues();
var sskeytemp = data[0][10].split("=")[1]; //the sheet url is in column k
var sskey = sskeytemp.split("#")[0]; //these first two steps get the sheet key
var ssid = data[0][10].split("gid=")[1]; //this last step gets the gid
var wrkbk = SpreadsheetApp.openById(sskey).getSheets(); //this gets the sheets from the workbook
for (var i = 0 ; i < wrkbk.length ; i++ ) {
if( ssid == wrkbk[i].getSheetId() ){ //this is to say if the spreadsheet gid, which is the gid of the sheet i know, matches the gid in the workbook from the link, thats the sheet i'm looking for
var ssname= wrkbk[i].getName();
var ss = SpreadsheetApp.openById(sskey).getSheetByName(ssname); //give me that sheet by name
var sslastColumn = ss.getLastColumn();
var sslastRow = ss.getLastRow();
var dataRange = ss.getRange(1,1,sslastRow,sslastColumn);
var data2 = dataRange.getValues(); //here's your data range, you can proceed freely from here