抱歉,如果我的问题在别的地方得到了答案,我整个下午都在谷歌上寻找答案,但我仍然是一个新手。
我正在尝试使用Google电子表格的脚本来访问不同的电子表格。我拥有的唯一信息是电子表格的URL,其中有键和gid (多表电子表格的某种按时间顺序排列的索引-我只能找到的信息是here)。
工作表URL类似于https://docs.google.com/spreadsheet/ccc?key=abc123#gid=178,它所链接的工作表是电子表格中的第一个工作表。
如何找到处理gid的工作表?
以下代码不起作用,因为它是基于工作表的顺序,而不是它们的创建时间:
var ss = SpreadsheetApp.openById("abc123");
var sheet = ss.getSheets();
Browser.msgBox(sheets[178].getIndex());发布于 2013-02-20 04:04:21
我会像这样做一些简单的事情:
var refSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("SHEET NAME HERE");
var refSheetId = refSheet.getSheetId().toString();,然后将refSheetId附加到getUrl字符串的末尾
var ssUrl = SpreadsheetApp.getActiveSpreadsheet().getUrl()+"#gid="+refSheetId;希望这能有所帮助!
发布于 2018-06-06 15:35:27
我是这样做的:
function getSheetByGid(spreadsheet, gid){
gid = +gid || 0;
var res_ = undefined;
var sheets_ = spreadsheet.getSheets();
for(var i = sheets_.length; i--; ){
if(sheets_[i].getSheetId() === gid){
res_ = sheets_[i];
break;
}
}
return res_;
}
var sheet = SpreadsheetApp.openById("YOUR_SHEET_ID_HERE");
var seetWithGid = getSheetByGid(cpSheet, "YOUR_GID_HERE");发布于 2012-10-31 03:35:57
我知道这已经很晚了,而且可能对原始请求者不再有用。但我在开发功能时看到了这个问题,但后来我自己解决了这个问题。您可以通过gid查找工作表,删除工作表时它不会更改的事实是一件好事……如果您打算这样使用它的话。基本上,我得到所有的工作表,循环通过工作表名称和工作表gid,直到gid匹配,然后我按名称调用工作表。
这是一些代码的一部分,我用来在编辑时从聚合的工作表中提取一行,并作为双向同步的一部分推送到子表。如果您只存储了gid和key,则可以跳过我展示的步骤,只需引用这些值即可。它似乎工作得非常快,这是一个更复杂的脚本,它是从工作簿中运行的,工作表被打破,但两个脚本几乎都需要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 herehttps://stackoverflow.com/questions/12395820
复制相似问题