Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

368
Vistas
Excepción: no tiene permiso para llamar a setValues

Tengo 2 pestañas en mi Hoja de Google:

dashboard :

ingrese la descripción de la imagen aquí

db :

ingrese la descripción de la imagen aquí

En el dashboard en la columna B llamo a la función yahoofinance() . Esta función verifica si para el ticker dado existen datos en db . Si es así, se devuelven estos datos. Si no, O si es así pero los datos están vacíos, Yahoo! Se contacta con Finanzas para recuperar los datos. Hasta aquí todo bien.

Tome JPM como ejemplo ahora. Se llama en la fila 3 en el dashboard . En db encontramos JPM pero no hay datos para el teletipo, por lo que lo recuperamos en vivo de Yahoo! Finanzas. Posteriormente, quiero actualizar la fila JPM en db con estos datos , para que la próxima vez que abramos el dashboard , no nos comuniquemos con Yahoo! de nuevo por esta información.

Sin embargo, vea la línea debajo de // update existing row ... el código genera un error Exception: You do not have permission to call setValues y no sé cómo resolverlo. ¿Tú? ¡Cualquier ayuda es muy apreciada!

 function yahoofinance(ticker) { // First check if we have this data stored already var db = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('db'); var tickers = db.getRange('A2:A').getValues(); var stored = false; var row = 2; for (var r = 0; r <= tickers.length; r++) { if (tickers[r] == ticker) { stored = true; row = row + r; } } if (stored == true) { // the ticker is known in db var range = db.getRange(row, 2, 1, 4); if (range.isBlank()) { // ticker is known but no data yet var data = get_live_data(ticker); // update existing row db.getRange(row, 2).setValues(data); // return data return data; } else { return range.getValues(); } } else { var data = get_live_data(ticker); // append row to db // return data to sheet return data; } } function get_live_data(ticker) { const url = 'https://query2.finance.yahoo.com/v10/finance/quoteSummary/' + encodeURI(ticker) + '?modules=price,assetProfile,summaryDetail'; let response = UrlFetchApp.fetch(url, { muteHttpExceptions: true }); if (response.getResponseCode() == 200) { var object = JSON.parse(response.getContentText()); } let fwdPE = object.quoteSummary.result[0]?.summaryDetail?.forwardPE?.fmt || '-'; let sector = object.quoteSummary.result[0]?.assetProfile?.sector || '-'; let mktCap = object.quoteSummary.result[0]?.price?.marketCap?.fmt || '-'; return [[fwdPE, sector, mktCap]]; }
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Entonces, según la línea debajo de // update existing row , desea agregar los datos en la otra hoja y según la documentación , las funciones personalizadas devuelven valores pero solo establecerán valores en la celda actual donde está usando la función, puede ' t modifique los datos en otra celda y es por eso que está recibiendo el error. Está llamando a la función en B4 y está intentando establecer valores en otra hoja al mismo tiempo, lo que no está permitido.

Una función personalizada no puede afectar a celdas que no sean aquellas a las que devuelve un valor. En otras palabras, una función personalizada no puede editar celdas arbitrarias, solo las celdas desde las que se llama y sus celdas adyacentes.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda