Python中从一个单元格到另一个单元格的Google工作表超链接

2024-04-25 02:26:50 发布

您现在位置:Python中文网/ 问答频道 /正文

给定一个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”,我不知道如何使用它访问另一张表中的数据(当然它不应该是我上面所做的方式,因为gc.spreadsheets().values().get()方法在谈论单元格范围而不是id时接受类似于“B2”的内容)+另一个问题是,只有当我的第一张工作表的每一行都有一个到第二张工作表的超链接时,这个解决方案才会起作用(我想在最后将一个值连接到另一个值)-因此,如果一个原始值不包含它,那么我就失去了整个顺序,我有一个巨大的问题

理想的情况是获取循环中特定单元格的超链接,然后将其连接到另一个工作表中超链接单元格的值


Tags: idexecuteget链接googletablerangeexcel
2条回答

我花了一整天的时间试图解决这一问题,因此对于任何与此问题斗争的人->;我将写下我所有的观察结果和最终的解决方案

  1. 我的第一个也是最大的错误是,我在创建超链接时将其添加到原始单元格,然后单击要链接的单元格。这种方式产生了一个只包含rangeid的链接,我不知道如何处理它,因为我需要A1符号->;因此,您需要将路径复制到您感兴趣的单元格中并将其添加到超链接中(这样,您将有一个带有rangeid+A1符号的链接)
  2. 然后迭代service.spreadsheets().get()请求的结果,并使用@ale13 answer中的正则表达式以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)

要从单元格中获取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中的正则表达式模块。另外,请注意,您可能需要将代码调整到范围,因为这只针对一个单元格

参考

相关问题 更多 >