2012-09-12 62 views
5

對不起,如果我的問題在別的地方回答,我一直在谷歌上尋找答案,但我仍然太新手了。Google電子表格 - 使用gid訪問表格

我試圖使用Google電子表格的腳本訪問不同的電子表格。 我得到的唯一信息是電子表格的URL,它包含關鍵字和gid(多頁表格的某種時間索引 - 我只能找到的信息是here)。

工作表網址類似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()); 

提前感謝!

回答

0

最好不要依靠GID的原因有很多

  1. 已刪除您的getSheets板材不會出現()方法,但在GID 將已佔到例如:

創建工作表Sheet(默認GID#1)

創建Sheet 2中(GID#2)

刪除Sheet 2中

創建表Sheet 3(GID#3)

  1. 的順序將被混亂了,如果用戶決定在電子表格UI走動片材。 getSheets按照它們在電子表格中排列的順序返回表單。

您可以通過名稱獲取表格的唯一方法是名稱。或者,如果您知道表單中的某些內容,則可以搜索每個表單。

+0

這不是我正在尋找的答案,但我認爲我必須去處理:/ – user1666847

0

我知道這是晚了,可能不會對原始請求者有用。但是我在研究功能時看到了這個問題,但最終我自己解決了這個問題。您可以通過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 
4

我會做一些簡單的像這樣:

var refSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("SHEET NAME HERE"); 
var refSheetId = refSheet.getSheetId().toString(); 

然後是refSheetId追加到的getURL字符串

var ssUrl = SpreadsheetApp.getActiveSpreadsheet().getUrl()+"#gid="+refSheetId; 

希望這有助於結束!

+0

這是我認爲我在整個互聯網上發現的唯一解決方案! :)我用它來創建一個函數,通過製表符名稱返回sheetID,然後用它創建一個頁眉頁面,然後可以使用超鏈接鏈接到各個製表符。謝謝! – stukerr

相關問題