Google Sheet在Python中从一个单元格到另一个单元格的超链接

时间:2020-06-15 13:52:00

标签: python google-sheets hyperlink range google-sheets-api

给出一个Google表格中的特定单元格,其中包含指向另一个Google表格中另一个单元格的超链接-如何正确获取此链接以及如何获取链接的单元格的值?

到目前为止,我已经知道了:

table_entities = gc.values().get(spreadsheetId=excel_id, range='XYZ').execute()['values']
table_entities_synthesis = gc.get(spreadsheetId=excel_id, ranges='XYZ', fields="sheets/data/rowData/values/hyperlink").execute()
synthesis_rangeid_list = []
for hyperlink in table_entities_synthesis.get('sheets')[0].get('data')[0].get('rowData'):
    if hyperlink.get('values', ''):
        hyperlink = hyperlink.get('values')[1].get('hyperlink')
        synthesis_rangeid_list.append(hyperlink)
        request = gc.spreadsheets().values().get(spreadsheetId=ABC, range=hyperlink, 
        valueRenderOption=value_render_option, dateTimeRenderOption=date_time_render_option)
        response = request.execute()

但是这种方法给了我这样的范围ID的列表:'#rangeid = 737563017 ',而且我不知道如何使用此方法从其他工作表访问数据(肯定是不应该是我上面做的方式,因为在谈论单元格范围而不是id时,gc.spreadsheets()。values()。get()方法接受的东西很像'B2')+另一个问题是这种解决方案仅当我的第一张纸的每一行都具有到第二张纸的超链接时才有效(我想最后将一个值连接到另一个值)-因此,如果一个原始值不包含该值,那么我将放弃整个订单,并得到一个大问题。

理想的情况是在循环中获取特定单元格的超链接,然后将其连接到另一张纸上的超链接单元格的值。

2 个答案:

答案 0 :(得分:1)

我花了一整天的时间来解决这个问题,以便对这个问题感到困惑的人->我将写下所有观察结果和最终解决方案。

  1. 我的第一个也是最大的错误是,我通过将超链接添加到原始单元格中来创建超链接,然后单击要链接到的单元格。这种方式导致了一个链接,该链接仅包含我不知道要怎么处理的rangeid,因为我需要A1表示法->因此,您需要复制到单元格的路径对链接感兴趣并将其添加到超链接中(这样,您将拥有一个同时具有rangeid + A1表示法的链接)
  2. 然后,您遍历service.spreadsheets()。get()请求的结果,并使用@ ale13答案中的正则表达式以A1表示法获取确切的单元格位置。
hyperlink_entities = gc.get(spreadsheetId=excel_id, ranges='sample_range!A1:P', fields="sheets/data/rowData/values/hyperlink", includeGridData='true').execute()
cell_range = []
for hyperlink in hyperlink_entities.get('sheets')[0].get('data')[0].get('rowData'):
    if hyperlink.get('values', ''):
        cell_address = (re.search('[^0-9a-zA-Z_$:](\$?[a-zA-Z]{1,2}\$?[1-9][0-9]*)(?![0-9a-zA-Z_:])', hyperlink.get('values')[1].get('hyperlink'))).group(1)
        print(cell_address)
        cell_range.append(cell_address)

答案 1 :(得分:0)

要从某个单元格获取hyperlink,您应该尝试以下操作:

SPREADSHEET_ID = 'ID_OF_THE_SS'
RANGE_NAME = 'SS_RANGE'
FIELDS = 'sheets/data/rowData/values/hyperlink'
request = service.spreadsheets().get(spreadsheetId = SPREADSHEET_ID, ranges = RANGE_NAME, includeGridData = 'true', fields = FIELDS)
response = request.execute()

关于检索超链接中引用的单元格的范围,您只需要使用以下正则表达式即可:

response = str(response)
results = re.search('[^0-9a-zA-Z_$:](\$?[a-zA-Z]{1,2}\$?[1-9][0-9]*)(?![0-9a-zA-Z_:])', response)
print(results.group(1))

注意

您必须使用import re在Python中导入正则表达式模块才能使用正则表达式。另外,请注意,由于这仅针对一个单元格,因此您可能必须将代码调整为您拥有的范围。

参考