Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

252
Visualizações
¿Cómo proteger las posiciones para colocar los datos en la hoja de cálculo cuando no se recuperan algunos valores?

Estoy usando la biblioteca CheerioGS :

Identificación → 1ReeQ6WO8kKNxoaA_O0XEQ589cIrRvEBA9qcWpNqdOP17i47u6N9M5Xh0
Proyecto → https://github.com/tani/cheeriogs

Mi código completo (lo agregué en su totalidad para que puedan usarlo en las pruebas):

 function importdataweb() { const sheet = SpreadsheetApp.getActive().getSheetByName('Page_One'); sheet.getRange('A1:Z' + sheet.getMaxRows()).clear({contentsOnly: true, skipFilteredRows: true}); const url = 'http://www.futebolnatv.com.br/jogos-hoje/'; const contentText = UrlFetchApp.fetch(url).getContentText(); const $ = Cheerio.load(contentText); let elements = $('tbody > tr > th > h4 > b') elements.each((index, value) => { sheet.getRange(index+1, 1).setValue($(value).text().trim()) }) let elements_1 = $('tbody > tr > td > div:nth-child(1)') elements_1.each((index, value) => { sheet.getRange(index+1, 2).setValue($(value).text().trim()) }) let elements_2 = $('tbody > tr > td > div:nth-child(2)') elements_2.each((index, value) => { sheet.getRange(index+1, 3).setValue($(value).contents().last().text().trim()) }) let elements_3 = $('tbody > tr > td > div:nth-child(3)') elements_3.each((index, value) => { sheet.getRange(index+1, 4).setValue($(value).contents().last().text().trim()) }) let elements_4 = $('tbody > tr > td b:nth-child(2)') elements_4.each((index, value) => { sheet.getRange(index+1, 5).setValue($(value).text().trim()) }) }

El resultado es:
ingrese la descripción de la imagen aquí

Algunos valores en la última columna por algún motivo no se recopilan, por lo que la posición de algunos de estos valores en la hoja de trabajo está en el lugar incorrecto.

Por ejemplo: si no se recoge el primer valor pero sí el segundo, el segundo estará en la fila 1 de la columna, entonces estaría mal.

¿Cómo podría agregar un guión - en las líneas que no se recopila el valor?

about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

En lugar de usar Array.prototype.forEach y Range.setValue para llenar celda por celda, una columna a la vez, cree una matriz de matriz de valores y luego agregue todos los valores a la vez mediante Range.setValues .

Para hacer esto, en lugar de tomar una celda ( td ) de todas las tablas ( tbody ) a la vez, tome la tabla completa ( tbody ) y verifique si existe la celda/contenido requerido, si no, agregue una cadena vacía ( '' ) a la posición correspondiente en el Array que se está construyendo.

Recursos

  • https://developers.google.com/apps-script/guides/support/best-practices?hl=en
about 4 years ago · Juan Pablo Isaza Relatório

0

Desea iterar esos tr. Esto dará una matriz 2d (no probada)

 $('tr').get().map(tr => $(tr).find("h4,.col-md-12").get().map(el => $(el).text()))
about 4 years ago · Juan Pablo Isaza Relatório

0

let data = []; let rows = $('tbody > tr'); rows.each((i, row) => { const newDataRow = [ $(row).find('th > h4 > b').text().trim(), $(row).find('td > div:nth-child(1)').text().trim(), $(row).find('td > div:nth-child(2)').contents().last().text().trim(), $(row).find('td > div:nth-child(3)').contents().last().text().trim(), $(row).find('td b:nth-child(2)').text().trim(), ]; data.push(newDataRow); }); // fill empty values data = data.map(row => row.map(el => el ? el : '-')); // write values to sheet const startRow = 1; const startCol = 1; const numRows = data.length; const numCols = data[0].length; sheet.getRange(startRow, startCol, numRows, numCols).setValues(data);

Cambios realizados en parte después de cargar el objeto Cheerio:

  1. Debe recopilar todos los datos y solo luego escribirlos ( setValues ) nuevamente en la hoja en 1 solicitud, para reducir el tiempo de ejecución del script y mejorar el rendimiento.
  2. Debe hacer un bucle de filas ( let rows = $('tbody > tr') ) con Cheerio, para poder combinar los valores que necesita para cada fila para que pueda mostrarse como una fila en una hoja de cálculo.

El segundo cambio es más importante, ya que le brinda la capacidad de trabajar con sus datos por fila más tarde, como ordenar, filtrar, etc.

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda