Actualizar automáticamente funciones «import» en Google Sheets

No hay forma nativa en Google Sheets de evaluar y actualizar automáticamente los datos importados con funciones como: IMPORTXML, IMPORTDATA, IMPORTHTML and IMPORTANGE.

Esto es útil, por ejemplo, cuando conectamos Google Sheets con Wordpress y queremos mantener actualizados los datos en WordPress.

Con este simple script podemos reevaluar las funciones «import» para que refresquen automáticamente los datos cada cierto tiempo.

En el Google Sheet nos vamos a Extensiones -> App Scripts y añadimos el siguiente código:

function RefreshImports() {
  var lock = LockService.getScriptLock();
  if (!lock.tryLock(5000)) return;             // Wait up to 5s for previous refresh to end.

  var id = "1_lE70PpTnRkMoOKXIavpKIc8KHb0LkSzMPsGAcufC8M";
  var sheetName = "Horoscopo scrapper";

  var ss = SpreadsheetApp.openById(id);
  var sheet = ss.getSheetByName(sheetName);
  var dataRange = sheet.getDataRange();
  var formulas = dataRange.getFormulas();
  var content = "";
  var now = new Date();
  var re = /.*[^a-z0-9]import(?:xml|data|feed|html|range)\(.*/gi;

  for (var row=0; row<formulas.length; row++) {
    for (var col=0; col<formulas[0].length; col++) {
      content = formulas[row][col];    
      if (content != "") {
        var match = content.search(re);
        if (match !== -1 ) {
          sheet.getRange(row+1, col+1).setFormula(content);         
        }
      }
    }
  }

  // Done refresh; release the lock.
  lock.releaseLock();

  // Show last updated time on sheet somewhere
  sheet.getRange(1,4).setValue("Last updated at " + now.toLocaleTimeString())
}

Ahora tan solo nos queda añadir el disparador automático. Para ello deberemos crear un activador basado en el tiempo (time-driven).

Añadir activador en Google Sheets

Fuente: https://stackoverflow.com/questions/33872967/periodically-refresh-importxml-spreadsheet-function

👇Tu comentario