给出一个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')+另一个问题是这种解决方案仅当我的第一张纸的每一行都具有到第二张纸的超链接时才有效(我想最后将一个值连接到另一个值)-因此,如果一个原始值不包含该值,那么我将放弃整个订单,并得到一个大问题。
理想的情况是在循环中获取特定单元格的超链接,然后将其连接到另一张纸上的超链接单元格的值。
答案 0 :(得分:1)
我花了一整天的时间来解决这个问题,以便对这个问题感到困惑的人->我将写下所有观察结果和最终解决方案。
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中导入正则表达式模块才能使用正则表达式。另外,请注意,由于这仅针对一个单元格,因此您可能必须将代码调整为您拥有的范围。