我在Google表格中有一些值,其中一些是超链接的,就像这里的第三个:
我想检索每个单元格的文本值,以及超链接(如果存在)。
我可以使用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或其他库以编程方式检索此内容?
答案 0 :(得分:2)
在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')]