从Google表格中检索链接的价值?

时间:2016-05-27 10:06:36

标签: python google-sheets gspread

我在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 个答案:

答案 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')]