web-dev-qa-db-fra.com

Comment extraire l'URL de Link dans Google Sheets en utilisant une formule?

J'ai copié à partir d'un site Web une série de liens hypertexte et les ai collés dans une feuille Google. Les valeurs s'affichent sous forme de texte lié, pas de formules de lien hypertexte, et sont toujours liées correctement. Pour chaque ligne, j'essaie d'extraire l'URL UNIQUEMENT (pas le texte convivial) et de l'insérer dans la colonne adjacente. Comment cela pourrait-il être accompli en utilisant une formule?

Par exemple:

=SOMEFUNCTION(cellThatHoldsLink, returnedURLOnly)

Ce scénario et les scénarios similaires ne s'appliquent pas car les données collées ne sont pas des formules . J'accepterai une solution de script (GAS) ou toute autre solution, mais je préférerais que cela soit fait à l'aide d'une formule . J'ai trouvé des dizaines de scripts de manipulation HYPERLINK, mais rien sur ce scénario particulier, ni même comment accéder à la propriété qui contient cette URL. Merci.

13
iamtoc

Vous pouvez utiliser importxml pour extraire le tableau de données complet et son contenu avec ceci: 

=IMPORTXML(A1,"//tr")

à côté de cela, nous avons tiré dans les chaînes d'URL dans les balises

=IMPORTXML(A1,"//tr/td[1]/a/@href")

et finalement concaténé les chaînes avec le domaine d'origine pour créer vos hyperliens

=ARRAYFORMULA("http://www.bnilouisiana.com/"&INDIRECT("A2:A"&COUNTA(A2:A)))
0
Aurielle Perlmann

Si vous préférez utiliser Google Apps Script, utilisez la fonction ci-dessous pour obtenir le lien hypertexte à partir d'un texte. Lorsque vous passez la cellule, vous devez envoyer avec un double devis. Exemple: =GETURL("A4") pour obtenir le lien hypertexte A4. 

function GETURL(input) {
  var range = SpreadsheetApp.getActiveSheet().getRange(input);
  var url = /"(.*?)"/.exec(range.getFormulaR1C1())[1];
  return url;
}

Reportez-vous ici par exemple. 

Edit: ignore cette réponse. Cela ne fonctionnera que si l'URL est liée à la cellule.

2
Abdul Hameed

Le service SpreadsheetApp intégré ne semble pas prendre en charge l'extraction de telles URL, mais le service "Advanced" Sheets le permet.

Activez le service Advanced Sheets conformément aux instructions de Google , puis essayez le code suivant:

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
          }
        }
      }
    }
  }
}

Cela crée une fonction personnalisée appelée EXTRACT_URL, que vous devez appeler avec une référence à la cellule contenant le lien. par exemple, =EXTRACT_URL(B3).

Malheureusement, cela ne fonctionne pas immédiatement, car le service Advanced Sheets ne peut pas être utilisé directement par des fonctions personnalisées. Ce script ajoute donc un menu appelé "Extraire les URL" dans la barre de menus de la feuille de calcul, avec un élément de menu intitulé "Processus = formules EXTRACT_URL (A1)". Lorsque vous cliquez dessus, toutes les utilisations de la fonction EXTRACT_URL seront remplacées par l'URL elle-même.

1
Ryan Tarpine

Vous avez trouvé une réponse qui fonctionne sur Google Groupes (par Troy):

  1. Publiez votre feuille de calcul (copiez l'URL)
  2. Créez une nouvelle feuille de calcul et utilisez la fonction IMPORTXML (remplacez l’URL par celle que vous avez obtenue à l’étape 1).
  3. Vous obtiendrez les données. Vous pourrez ensuite copier et coller les valeurs là où vous en avez besoin.
  4. Annuler la publication de la feuille de calcul (si vous ne souhaitez pas la rendre publique)

Pourrait être fait par script, mais je n'ai pas le temps maintenant. :) 

1
DusanV

J'ai pu résoudre ce problème pour Jotform d'une manière très simple.

Je cherchais à inclure le lien Modifier dans une requête, mais cela ne me donnerait que le texte "Modifier la soumission".

Cependant, j'ai remarqué que j'avais l'ID de formulaire dans la colonne R. J'ai ensuite pu copier le lien JotForm et le combiner avec la référence de cellule " https://www.jotform.com/edit/ " & R2

0
Azriel Blumberg