web-dev-qa-db-ja.com

数式を使用してGoogleスプレッドシートのリンクからURLを抽出する方法は?

ウェブサイトから一連のハイパーリンクをコピーして、Googleシートに貼り付けました。値は、ハイパーリンク式ではなく、リンクされたテキストとして表示され、引き続き正しくリンクされます。行ごとに、(フレンドリーテキストではなく)URLのみを抽出し、隣接する列に挿入しようとしています。数式を使用してこれをどのように達成できますか?

例えば:

=SOMEFUNCTION(cellThatHoldsLink, returnedURLOnly)

このシナリオおよび同様のシナリオ は、貼り付けられたデータが数式ではないため適用されません。スクリプト(GAS)ソリューション、またはその問題のソリューションを受け入れますが、式を使用してそれを行うことができれば好まれます。何十ものHYPERLINK操作スクリプトを見つけましたが、この特定のシナリオでは、またはそのURLを保持しているプロパティにアクセスする方法すらありません。ありがとう。

15
iamtoc

Importxmlを使用して、データテーブル全体とそのコンテンツを取得できます。

=IMPORTXML(A1,"//tr")

その横に、タグのurl文字列を引き込みました

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

最後に、文字列を元のドメインと連結してハイパーリンクを作成しました

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

Google Apps Scriptを使用したい場合は、以下の関数を使用してテキストからハイパーリンクを取得します。セルを渡すときは、二重引用符で送信する必要があります。例:=GETURL("A4")はA4ハイパーリンクを取得します。

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

here を参照してください。

編集:この回答は無視してください。これは、URLがセルにリンクされている場合にのみ機能します。

3
Abdul Hameed

組み込みの SpreadsheetApp サービスはそのようなURLのプルをサポートしていないようですが、 “ Advanced” Sheets サービスはサポートしています。

Googleの指示 に従ってAdvanced Sheetsサービスを有効にしてから、次のコードを試してください。

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

これにより、EXTRACT_URLと呼ばれる カスタム関数 が作成されます。リンクを含むセルへの参照で呼び出す必要があります。たとえば、=EXTRACT_URL(B3)など。

残念ながら、高度なスプレッドシートサービス 直接使用することはできません カスタム関数により、すぐには機能しません。そのため、このスクリプトは、「Process = EXTRACT_URL(A1)formulas」というラベルの付いた1つのメニュー項目とともに、「Extract URLs」というメニューをスプレッドシートメニューバーに追加します。クリックすると、EXTRACT_URL関数のすべての使用がURLに置き換えられます。

2
Ryan Tarpine

役立つ答えを見つけました Googleグループ上 (by Troy):

  1. スプレッドシートを公開(URLをコピー)
  2. 新しいスプレッドシートを作成し、IMPORTXML関数を使用します(URLを手順1で取得したURLに置き換えます)
  3. データを取得します-必要な値をコピーして貼り付けることができます
  4. スプレッドシートを非公開にします(公開したくない場合)

スクリプトで実行できますが、今は時間がありません。 :)

1
DusanV

セルの行が制限されている場合の簡単な方法--->

  1. セルを右クリックして[リンクを編集]をクリックするだけです
  2. テキストを削除して「適用」をクリックします
  3. 続くすべてのセルにf4を使用します

あなたがこれにもっと持っているか、セルの選択で行うことができるならお願いします。お知らせ下さい

0
Jayesh Mayekar

これを非常に簡単な方法でJotformで解決できました。

クエリに[編集]リンクを含めることを検討していましたが、「送信の編集」というテキストのみが表示されます。

しかし、R列にフォームIDがあることに気付きました。その後、JotFormリンクをコピーして、セル参照「 https://www.jotform.com/edit/ 」と組み合わせることができました&R2

0
Azriel Blumberg