Jak wyodrębnić adres URL z łącza w Arkuszach Google za pomocą formuły?

Skopiowałem ze strony internetowej serię hiperłączy i wkleiłem je do arkusza google. Wartości są wyświetlane jako tekst połączony, a nie formuły hiperłącza i nadal są poprawnie połączone. Dla każdego wiersza próbuję wyodrębnić tylko adres URL (nie Przyjazny tekst) i wstawić go do sąsiedniej kolumny. Jak można to osiągnąć za pomocą formuły?

Na przykład:

=SOMEFUNCTION(cellThatHoldsLink, returnedURLOnly)

Ten i podobne scenariusze nie mają zastosowania, ponieważ wklejone dane nie są formułami. Przyjmę rozwiązanie Skryptowe (gazowe), lub dowolne rozwiązanie w tym zakresie, ale wolałoby, aby można było to zrobić za pomocą wzoru. Znalazłem dziesiątki skryptów manipulacji hiperłączami, ale nic na ten konkretny scenariusz, a nawet jak uzyskać dostęp do właściwości, która przechowuje ten adres url. Dzięki.

Author: Community, 2016-02-05

4 answers

Możesz użyć importxml, aby pobrać całą tabelę danych i jej zawartość w następujący sposób:

=IMPORTXML(A1,"//tr")

Obok wyciągnęliśmy ciągi url w znacznikach

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

I na koniec połączył łańcuchy z oryginalną domeną, aby utworzyć hiperłącza

=ARRAYFORMULA("http://www.bnilouisiana.com/"&INDIRECT("A2:A"&COUNTA(A2:A)))
 0
Author: Aurielle Perlmann,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-06 20:53:45

Jeśli chcesz korzystać ze skryptu Google Apps, użyj poniższej funkcji, aby uzyskać hiperłącze z tekstu. Po przejściu komórki należy wysłać z podwójną wyceną. Np: =GETURL("A4") Aby uzyskać hiperłącze A4.

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

Zobacz tutaj na przykład.

Edit: Ignoruj tę odpowiedź. Będzie to działać tylko wtedy, gdy adres url jest połączony w komórce.

 2
Author: Abdul Hameed,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-06 14:03:05

Znaleziono odpowiedź, która działa w Google Groups (by Troy):

  1. Opublikuj swój arkusz kalkulacyjny (skopiuj adres url)
  2. Utwórz nowy arkusz kalkulacyjny i użyj funkcji IMPORTXML (zastąp adres url adresem URL uzyskanym w kroku 1)
  3. otrzymasz dane - możesz następnie skopiować i wkleić wartości tam, gdzie ich potrzebujesz
  4. Wycofaj publikację arkusza kalkulacyjnego (jeśli nie chcesz, aby był publiczny)

Można zrobić skryptem, ale nie mam teraz czasu. :)

 1
Author: DusanV,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-13 15:54:03

Wbudowana usługa SpreadsheetApp wydaje się nie obsługiwać wyciągania takich adresów URL, ale usługa "zaawansowane" Arkusze tak.

Włącz usługę Advanced Sheets zgodnie z instrukcjami Google , a następnie wypróbuj ten kod:

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

Tworzy to funkcję niestandardową o nazwie EXTRACT_URL, którą należy wywołać z odniesieniem do komórki, która zawiera odnośnik; na przykład =EXTRACT_URL(B3).

Niestety nie działa od razu, ponieważ usługa Advanced Sheets nie może być używana bezpośrednio przez funkcje niestandardowe. Skrypt ten dodaje menu o nazwie "Wyodrębnij adresy URL" do paska menu arkusza kalkulacyjnego, z jednym elementem menu o nazwie "proces =extract_url (A1) formuły". Po kliknięciu, zastąpi on wszystkie zastosowania funkcji EXTRACT_URL z samym adresem URL.

 1
Author: Ryan Tarpine,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-22 06:43:37