Saltar al contenido

¿Cómo extraer la URL del enlace en Google Sheets usando una fórmula?

Este equipo redactor ha pasado mucho tiempo buscando para dar espuestas a tu pregunta, te dejamos la solución por eso esperamos serte de gran ayuda.

Solución:

Si su hipervínculo se especifica en otra celda como una fórmula, por ejemplo, supongamos que la celda A1 contiene la fórmula =HYPERLINK("https://www.wikipedia.org/","Wikipedia"), puede extraer el texto del vínculo mediante una expresión regular. Todo lo que necesitas hacer es:

=REGEXEXTRACT(FORMULATEXT(A1),"""(.+)"",")

Esta fórmula arrojará el resultado:

https://www.wikipedia.org/

No se requieren funciones personalizadas.

Después de una actualización en 2020, todos los códigos que encontré en Internet estaban rotos, así que aquí está mi contribución:

/** 
 * Returns the URL of a hyperlinked cell, if it's entered with control + k. 
 * Author: @Frederico Schardong based on https://support.google.com/docs/thread/28558721?hl=en&msgid=28927581 and https://github.com/andrebradshaw/utilities/blob/master/google_apps/convertHiddenLinks.gs 
 * Supports ranges
 */
function linkURL(reference) 
  var sheet = SpreadsheetApp.getActiveSheet();
  var formula = SpreadsheetApp.getActiveRange().getFormula();
  var args = formula.match(/=w+((.*))/i);
  try 
    var range = sheet.getRange(args[1]);
  
  catch(e) 
    throw new Error(args[1] + ' is not a valid range');
  

  var formulas = range.getRichTextValues();
  var output = [];
  for (var i = 0; i < formulas.length; i++) 
    var row = [];
    for (var j = 0; j < formulas[0].length; j++) 
      row.push(formulas[i][j].getLinkUrl());
    
    output.push(row);
  
  return output

El servicio integrado de SpreadsheetApp no ​​parece admitir la extracción de dichas URL, pero el servicio de Hojas "Avanzadas" sí lo hace.

Habilite el servicio Hojas de cálculo avanzadas de acuerdo con las instrucciones de Google y luego pruebe este código:

function onOpen() 
  var menu = SpreadsheetApp.getUi().createMenu("Extract URLs");
  menu.addItem("Process =EXTRACT_URL(A1) formulas", "processFormulas");
  menu.addToUi();


function EXTRACT_URL() 
  return SpreadsheetApp.getActiveRange().getFormula();


function processFormulas() 
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheet.getActiveSheet();
  var rows = sheet.getDataRange().getFormulas();
  for (var r = 0; r < rows.length; r++) 
    var row = rows[r];
    for (var c = 0; c < row.length; c++) 
      var formula = row[c];
      if (formula) 
        var matched = formula.match(/^=EXTRACT_URL((.*))$/i);
        if (matched) 
          var targetRange = matched[1];
          if (targetRange.indexOf("!") < 0) 
            targetRange = sheet.getName() + "!" + targetRange;
          
          var result = Sheets.Spreadsheets.get(spreadsheet.getId(), 
            ranges: targetRange,
            fields: 'sheets.data.rowData.values.hyperlink'
          );
          try 
            var value = result.sheets[0].data[0].rowData[0].values[0].hyperlink;
            sheet.getRange(r + 1, c + 1).setValue(value);
           catch (e) 
            // no hyperlink; just ignore
          
        
      
    
  

Esto crea una función personalizada llamada EXTRACT_URL, que debe llamar con una referencia a la celda que contiene el enlace; por ejemplo, =EXTRACT_URL(B3).

Desafortunadamente, no funciona de inmediato, porque las funciones personalizadas no pueden usar directamente el servicio Hojas avanzadas. Por lo tanto, este script agrega un menú llamado "Extraer URL" a la barra de menú de la hoja de cálculo, con un elemento de menú denominado "Fórmulas de proceso =EXTRACT_URL(A1)". Al hacer clic en él, reemplazará todos los usos de la EXTRACT_URL función con la propia URL.

Sección de Reseñas y Valoraciones

Recuerda que tienes la opción de aclarar si descubriste tu atolladero a tiempo.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *