2016-05-27 1 views
3

У меня есть несколько значений в листе Google, некоторые из которых являются гиперссылками, как третий здесь:Получить значение ссылок из Листа Google?

enter image description here

Я хочу, чтобы получить текстовое значение каждой ячейки, и если присутствуют гиперссылки.

Я могу получить доступ лист достаточно легко с gspread:

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 

Однако это только печатает значение строки из ссылок, а не фактической HREF, что указывает ссылка.

Кто-нибудь знает, можно ли получить это программно, используя gspread или другую библиотеку?

ответ

1

В gspread экземпляр Cell имеет недокументированный атрибут input_value, который дает вам доступ к формуле.

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

Оттуда вам просто нужно разделить строку, чтобы удалить нежелательные части.

В вашем случае, вы можете создать подкласс gspread.Worksheet так:

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')] 
Смежные вопросы