Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

250
Views
Necesita una secuencia de comandos para recorrer la lista de cotizaciones bursátiles, copiar la salida resultante y pegar la salida de varias filas en una hoja separada dentro del libro de trabajo

Mi pregunta es similar a Necesito una secuencia de comandos para recorrer la lista de cotizaciones de acciones, copiar la salida resultante y pegar la salida en una hoja separada dentro del libro de trabajo. Sin embargo, en lugar de copiar y pegar una sola fila (para cada indicador) debajo de la última fila no vacía, necesito copiar y pegar 100 filas (para cada indicador) debajo de la última fila no vacía.

Tengo tres hojas llamadas Tickers , Data y Results dentro de un solo libro de trabajo.

Si se hace manualmente, el trabajo sería el siguiente: Ingrese un símbolo de cotización en la celda A2 en la Hoja de Data . Luego, la hoja recupera los datos históricos de la serie temporal de Google Finance, ejecuta fórmulas y devuelve 100 filas y 7 columnas de datos (Ticker, Date, Open, High, Low, Close, Volume) en el rango A5:G254 dentro de la misma hoja de Data . Copie las 100 filas de datos devueltos y pegue los datos en la hoja de resultados debajo de la última fila no vacía. Luego repita el proceso con cada ticker.

Solicitud: cree una secuencia de comandos para recorrer una lista de 50 símbolos bursátiles de la hoja de Ticker (rango B2: B51), pegue 1 símbolo a la vez en la celda A2 de la hoja de Data , espere a que se ejecute la API de Google Finance y luego copie todas las filas resultantes generadas en el rango A5:G254, y pegando esos resultados en la hoja de Results , debajo de los datos generados desde el teletipo anterior, hasta que haya una tabla de "formato largo" de datos de series temporales de cada uno de los 50 teletipos.

El problema con mi secuencia de comandos actual es que pega solo la primera fila del rango deseado A5:G254.

 function getNewPrices() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const tickerSheet = ss.getSheetByName('Tickers'); const dataSheet = ss.getSheetByName('Data'); const resultsSheet = ss.getSheetByName('Results'); let data; let myListOfTickers = tickerSheet.getRange('B2:B51').getValues().filter(String).sort(); myListOfTickers.forEach(ticker => { dataSheet.getRange('A2').setValue(ticker[0]); data = dataSheet.getRange('A5:G254').getValues()[0]; pasteData(resultsSheet, data); }); }; function pasteData(resultsSheet,data){ let nextRow = resultsSheet.getLastRow() + 1; data.forEach((datum,index) => { resultsSheet.getRange(nextRow,index + 1,1,1).setValue(datum); }); };
about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

No estoy completamente seguro, pero creo que esto es lo que quieres.

 function getNewPrices() { const ss = SpreadsheetApp.getActive(); const tsh = ss.getSheetByName('Tickers'); let tvs = tsh.getRange('B2:B51').getValues().filter(String).sort(); const dsh = ss.getSheetByName('Data'); const rsh = ss.getSheetByName('Results'); dsh.getRange(2,1,tvs.length,tvs[0].length).setValues(tvs); let dvs = dsh.getRange('A5:G254').getValues(); rsh.getRange(rsh.getLastRow() + 1, 1, dvs.length, dvs[0].length).setValues(dvs); }

Puede ir a Google Apps Script Reference y usar el cuadro de búsqueda para encontrar cualquier función que no entienda. Si es una función de JavaScript puro, vaya aquí

about 4 years ago · Juan Pablo Isaza Report

0

Problema resuelto. Aquí está el código final si alguien quiere usarlo más adelante. Gracias por el código inicial Cooper.

 function getNewPrices() { const ss = SpreadsheetApp.getActive(); const tsh = ss.getSheetByName('Tickers'); let tvs = tsh.getRange('B2:B51').getValues().filter(String).sort(); const dsh = ss.getSheetByName('Data'); const rsh = ss.getSheetByName('Results'); tvs.forEach(ticker =>{ dsh.getRange('A2').setValue(ticker[0]); let dvs = dsh.getRange('A5:G254').getValues(); rsh.getRange(rsh.getLastRow() + 1, 1, dvs.length, dvs[0].length).setValues(dvs); }); }
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!