从谷歌表中检索链接的价值?

3

我在Google Sheet中有一些数值,其中一些是超链接,比如这里的第三个:

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个回答

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

1
我使用了input_value但是没有获得任何结果,甚至没有文本。我认为input_value现在已经被弃用了。 - Chaithanya Krishna
@ChaithanyaKrishna 您说得完全正确,这已经被弃用了。现在正确的方法是使用 value_render_option 关键字参数,例如 worksheet.cell(1, 1, value_render_option='FORMULA') - Jacques Gaudin
value_render_option 的文档在这里:https://developers.google.com/sheets/api/reference/rest/v4/ValueRenderOption - Jacques Gaudin
谢谢您的回复,Jacques。我已经尝试了value_render_option,并使用了所有三种可能的选项,但它没有起作用。 - Chaithanya Krishna
@ChaithanyaKrishna 我没有尝试过,但这是源代码中指定的替代方法。你应该提出一个新问题,展示你已经尝试过什么并且没有成功。 - Jacques Gaudin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接