Итак, что я понимаю из OP, так это то, что у вас есть одна основная электронная таблица, в которой вы хотите иметь ссылки на отдельные листы, где один или несколько из этих листов могут находиться в одном или нескольких файлах электронных таблиц.
Функция HYPERLINK
только превращает URL-адрес в гиперссылку и действительно полезна только тогда, когда вы хотите иметь гипертекст, а не просто ссылку. Если вы вводите необработанный URL-адрес в качестве данных, он автоматически превращается в гиперссылку, поэтому дополнительной работы не требуется.
Как упоминалось в других ответах, решение состоит в том, чтобы URL-адрес электронной таблицы затем использовать значение gid
для вычисления ссылки на желаемый лист в электронной таблице. Вы можете написать простое приложение, которое собирает все ссылки отдельных листов и записывает их в мастер.
Ниже приведены некоторые фрагменты псевдокода (Python), которые могут помочь вам начать работу. Я опускаю весь шаблонный код аутентификации, но если он вам нужен, см. это сообщение в блоге и это видео . В приведенном ниже коде предполагается, что конечной точкой службы API является SHEETS
.
Это читает целевую электронную таблицу для построения ссылок для каждого из ее листов:
# open target Sheet, get all sheets & Sheet URL
SHEET_ID = TARGET_SHEET_DRIVE_FILE_ID
res = SHEETS.spreadsheets().get(spreadsheetId=SHEET_ID,
fields='sheets,spreadsheetUrl').execute()
sheets = res.get('sheets', [])
url = res['spreadsheetUrl']
# for each sheet, dump out its name & full URL
for sheet in sheets:
data = sheet['properties']
print('** Sheet title: %r' % data['title'])
print(' - Link: %s#gid=%s' % (url, data['sheetId']))
Вместо вывода на экран, допустим, вы сохранили их в (name, URL)
массиве из двух кортежей в своем приложении, поэтому в итоге он выглядит примерно так, как этот список с именем sheet_data
:
sheet_data = [
('Intro', 'https://docs.google.com/spreadsheets/d/SHEET_ID/edit#gid=5'),
('XData', 'https://docs.google.com/spreadsheets/d/SHEET_ID/edit#gid=3'),
('YData', 'https://docs.google.com/spreadsheets/d/SHEET_ID/edit#gid=7')
]
Затем вы можете записать их в мастер (начиная с верхнего левого угла, ячейка A1
) следующим образом:
SHEET_ID = MASTER_SHEET_DRIVE_FILE_ID
SHEETS.spreadsheets().values().update(
spreadsheetId=SHEET_ID, range='A1',
body={'values': sheet_data},
valueInputOption='USER_ENTERED'
).execute()
Некоторые предостережения при использовании gid
:
- Первый созданный для вас лист по умолчанию (Sheet1) всегда имеет
gid=0
.
- Любые листы, которые вы добавите после этого, будут иметь случайный
gid
.
- Не делайте ставку на
gid=0
для 1-го листа в ваших таблицах, поскольку вы или кто-то другой, возможно, удалили исходный лист по умолчанию, как в моем примере выше.
Если вы хотите увидеть больше примеров использования Sheets API, вот еще видео, которые я сделал (вместе с сообщениями, в которых подробно рассматривается каждый пример кода):
Затем, когда вы открываете мастер в пользовательском интерфейсе Таблиц, вы можете перейти к любому из отдельных листов, независимо от того, в каких файлах электронных таблиц они находятся. Если вы хотите, чтобы они автоматически открывались другим приложением или скриптом, большинство языков программирования предлагают разработчикам способы запуска веб-браузера по целевому URL-адресу. В Python это будет модуль webbrowser
(docs):
import webbrowser
webbrowser.open_new(url) # or webbrowser.open_new_tab(url)
person
wescpy
schedule
06.03.2017