2012-07-30 77 views
9

Estoy escribiendo una secuencia de comandos de Google Apps en mi sitio de Google y estoy tratando de utilizar los datos que se ofrecen en 2 pestañas diferentes en una hoja de cálculo de Google. Por lo que pensé que entendía de la documentación, pude usar todos los métodos disponibles en la clase SpreadsheetApp en una secuencia de comandos de Sitios simplemente usando el método openById().¿Cómo acceder a los datos en diferentes hojas de cálculo de Google a través de Google Apps Script?

De todas formas esto es lo que he intentado hacer

function doGet(e) { 

    var doc = SpreadsheetApp.openById(SPREADSHEET_ID_GOES_HERE).getActiveSheet(); 
    SpreadsheetApp.setActiveSheet(doc.getSheetId()[1]); 

    //.... 
} 

consigo el error

Cannot find method setActiveSheet(. (line 4)

estoy tirando de mi trabajo fuera de este enlace: Storing Data in Google Spreadsheets y también la sección Servicio Ui enumerados en construcción Interfaces de usuario.

¿Alguien está viendo lo que estoy haciendo mal en estas dos líneas?

+1

me gustaría sugerir que usted debe hacer uso de la función de autocompletar del editor de secuencia de comandos para evitar el error de sintaxis o utilizando métodos que no se aplican ... es una manera fácil de empezar sin errores y/o errores tipográficos molestos ;-) –

Respuesta

18

setActiveSheet debe usarse solo con la hoja de cálculo que muestra la UI, una hoja en una hoja de cálculo que ha abierto en su navegador.

Con SpreadsheetApp.openById está abriendo una hoja de cálculo para acceder a sus datos, pero no se abre en su navegador. No tiene una IU.

he encontrado este comentario en https://developers.google.com/apps-script/class_spreadsheetapp?hl=es-ES#openById:

// The code below opens a spreadsheet using it's ID and gets the name for it. 
// Note that the spreadsheet is NOT physically opened on the client side. 
// It is opened on the server only (for modification by the script). 
var ss = SpreadsheetApp.openById("abc1234567"); 

Algunos ejemplos asumen la secuencia de comandos se ejecuta en la hoja de cálculo. No es su caso, porque está ejecutando un script como servicio, que debe tener su propia interfaz de usuario.

+1

Eso es un poco decepcionante. ¿Por casualidad conoce una forma de acceder a los datos en diferentes pestañas a través de un servicio que no se ejecuta dentro de la Hoja de cálculo? – Mathitis2Software

+1

simplemente use getSheetByName ('el nombre de la hoja'), de manera predeterminada es 'Hoja1' a menos que lo renombre o si no está usando inglés ... por ejemplo, en francés, el valor predeterminado es 'Feuille1' –

+1

getSheets() traerte una matriz con todas las hojas en la hoja de cálculo. –

1

Hay al menos un problema en estas dos líneas. El primero es que los parámetros del método setActiveSheet son un objeto de clase Hoja y el método getSheetId devuelve un valor entero. Por cierto, este método (getSheetId) es not documented. El segundo problema puede ocurrir si SpreadsheetApp no ​​tiene una hoja de cálculo activa. En este caso, aparece el mensaje "Seleccione primero una hoja de cálculo activa". error. Use el método SpreadsheetApp.setActiveSpreadsheet para establecer una hoja de cálculo activa.

0

Debe acceder a cada hoja por separado.

var ss = SpreadsheetApp.openById(SPREADSHEET_ID_GOES_HERE); 
var sheet = ss.getSheets()[0]; // "access data on different tabs" 
ss.setActiveSheet(sheet); 
+1

"¿Por casualidad usted conoce una forma de acceder a los datos en diferentes pestañas a través de un servicio que no se ejecuta dentro de la Hoja de cálculo?" var sheet1 = ss.getSheets() [0]; –

+0

Parece que no tengo acceso a ese método a través del servicio independiente. Parece que tengo que usar getSheetID(), getSheetName() y getSheetValues ​​() – Mathitis2Software

4

Creo @ megabyte1024 aborda los errores de sintaxis, pero en respuesta a su comentario a @YoArgentina:

Do you happen to know of a way to access data on different tabs then through a service not running inside the Spreadsheet?

hace esto tipo de ayuda?

var ss = SpreadsheetApp.openById(SPREADSHEET_ID_GOES_HERE); 
var sheets = ss.getSheets(); 
// the variable sheets is an array of Sheet objects 
var sheet1A1 = sheets[0].getRange('A1').getValue(); 
var sheet2A1 = sheets[1].getRange('A1').getValue(); 
+0

Parece que no se puede acceder a getSheets() fuera de una secuencia de comandos de hoja de cálculo => TypeError: no se puede encontrar la función getSheets en la hoja de objeto. (línea 4) – Mathitis2Software

+1

¿Estás seguro de que no estás usando 'var doc = SpreadsheetApp.openById (SPREADSHEET_ID_GOES_HERE) .getActiveSheet();' como en tu publicación original? Con el código en esta publicación, 'ss' debe ser un objeto de hoja de cálculo, no un objeto de hoja. – AdamL

+0

Sí, eres 100% correcto. Me perdí completamente eso. Muchas gracias. – Mathitis2Software

Cuestiones relacionadas