2016-05-27 16 views
3

Ich habe einige Werte in einer Google-Tabelle, von denen einige Hyperlink verwiesen, wie die dritte hier:Wert von Links von Google Sheet abrufen?

enter image description here

Ich möchte den Textwert jeder Zelle abzurufen, und den Hyperlink, falls vorhanden.

Ich bin in der Lage das Blatt leicht genug, um mit gspread zuzugreifen:

import gspread 
from oauth2client.service_account import ServiceAccountCredentials 

scope = ['https://spreadsheets.google.com/feeds'] 
credentials = ServiceAccountCredentials.from_json_keyfile_name(
    './credentials.json', scope) 
gc = gspread.authorize(credentials) 
key = 'xxxxx' 
wks = gc.open_by_key(key).worksheets() 
for wk in wks: 
    links = wk.col_values(3) 
    for l in links: 
     print l.value 

Dies ist jedoch druckt nur den String-Wert der Links, nicht die tatsächlichen href, dass der Link zu zeigt.

Weiß jemand, ob es möglich ist, dies programmgesteuert mit gspread oder einer anderen Bibliothek abzurufen?

Antwort

1

In gspread hat eine Cell Instanz ein undokumentiertes Attribut input_value, mit dem Sie auf die Formel zugreifen können.

>>> formula = mycell.input_value 
>>> formula 
'=HYPERLINK("https://url.com","Link Text")' 
>>> lst = formula.split('"') 
>>> lst[1], lst[3] 
('https://url.com', 'Link Text') 

Von dort müssen Sie nur die Zeichenfolge aufteilen, um die unerwünschten Teile zu entfernen.

In Ihrem Fall können Sie gspread.Worksheet wie so Unterklasse:

class CustomWorksheet(gspread.Worksheet): 
    def get_links(self, col): 
     """Returns a list of all links urls in column `col`. 
      Empty cells in this list will be rendered as :const:`None`. 
     """ 
     start_cell = self.get_addr_int(1, col) 
     end_cell = self.get_addr_int(self.row_count, col) 

     row_cells = self.range('%s:%s' % (start_cell, end_cell)) 
     return [cell.input_value.split('"')[1] for cell in row_cells if cell.input_value.startswith('=HYPERLINK')] 
Verwandte Themen