2012-09-12 36 views
5

lo siento si mi pregunta se encuentra en otra parte, he estado buscando respuestas en google toda la tarde, pero todavía soy demasiado novato.Google Spreadsheet - Accediendo a la hoja con gid

Estoy tratando de usar las secuencias de comandos de las hojas de cálculo de Google para acceder a una hoja de cálculo diferente. La única información que tengo es la URL de la hoja de cálculo, donde tiene la clave y el número de gid (algún tipo de índice cronológico para hojas de hojas múltiples, solo la información que pude encontrar es here).

La hoja URL es algo así como https://docs.google.com/spreadsheet/ccc?key=abc123#gid=178 Y la hoja a la que se vincula es la primera hoja de la hoja de cálculo.

¿Cómo encuentro la hoja que machaca el gid?

El siguiente no funciona, ya que está basado en el orden de las hojas, no el tiempo que se crean:

var ss = SpreadsheetApp.openById("abc123"); 

var sheet = ss.getSheets(); 
Browser.msgBox(sheets[178].getIndex()); 

Gracias de antemano!

Respuesta

0

mejor es no confiar en la GID por muchas razones

  1. Un borrados hoja no se mostrará en sus getSheets() método, pero se han representado en el gid Por ejemplo:

Crear Hoja1 (por defecto, gid # 1)

Crear Hoja2 (GID # 2)

Eliminar Hoja2

Crear Sheet3 (GID # 3)

  1. la orden será revuelto si el usuario decide mover hojas en torno a la interfaz de usuario de hoja de cálculo. getSheets devuelve las hojas en el orden en que están organizadas en la hoja de cálculo.

La única forma de acceder a la hoja es por su nombre. Alternativamente, si conoce algún contenido en la hoja, puede buscar en cada hoja.

+0

Esa no era la respuesta que estaba buscando, pero creo que tendré que ir con eso de todos modos:/ – user1666847

0

Sé que es tarde y puede que ya no sea útil para el solicitante original. Pero vi esta pregunta porque estaba trabajando en la funcionalidad, pero terminé solucionándola más tarde. Puede buscar una hoja por gid, y el hecho de que no cambie cuando elimine la hoja es algo bueno ... si así es como tiene la intención de usarlo. Básicamente, recibo todas las hojas y recorro los nombres de las hojas y las hojas gid hasta que el gid coincida, y luego llamo a la hoja por su nombre.

Aquí hay parte de un código que utilizo para tomar una fila, desde una hoja agregada en la edición, y presiono la hoja secundaria como parte de una sincronización bidireccional. Si solo tiene almacenada la clave y el gid, puede omitir los pasos que mostré y simplemente hacer referencia a esos valores. Parece que funciona muy rápido, es una secuencia de comandos más complicada que se ejecuta desde el libro de trabajo con las hojas descompuestas, pero ambas secuencias de comandos tardan casi exactamente 2 segundos en enviar, lo cual es aceptable para mí.

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

me gustaría hacer algo tan simple como esto:

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

Y a continuación, añadir el refSheetId al final de la cadena getUrl

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

Espero que esto ayude!

+0

¡Esta es la única solución que creo que he encontrado para esto en todo el internet! :) Lo usé para crear una función que devuelva el sheetID por nombre de pestaña y luego lo utilicé para crear una página de encabezado que luego podría vincular a las pestañas individuales mediante el hipervínculo. ¡Gracias! – stukerr

Cuestiones relacionadas