【问题标题】:Retrieve value of links from Google Sheet?从 Google 表格中检索链接的值?
【发布时间】:2016-05-27 10:06:35
【问题描述】:

我在 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 或其他库以编程方式检索此内容?

【问题讨论】:

    标签: python google-sheets 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')]
    

    【讨论】:

    • 我已经使用了 input_value 但我得到了 None 甚至没有文本。我认为 input_value 现在已被弃用。
    • @ChaithanyaKrishna 你是绝对正确的,这已被弃用。现在执行此操作的正确方法是使用 value_render_option 关键字参数,例如worksheet.cell(1, 1, value_render_option='FORMULA')
    • value_render_option 的文档在这里:developers.google.com/sheets/api/reference/rest/v4/…
    • 感谢雅克的回复。我已经尝试了 value_render_option 以及所有这三种可能,但它没有奏效
    • @ChaithanyaKrishna 我没有尝试过,但它是源代码中所述的替换。您可能应该提出一个新问题,说明您尝试过哪些方法没有奏效。
    猜你喜欢
    • 1970-01-01
    • 2018-06-30
    • 1970-01-01
    • 1970-01-01
    • 2020-04-25
    • 1970-01-01
    • 2021-01-25
    • 1970-01-01
    • 2016-02-26
    相关资源
    最近更新 更多