Гиперссылка таблицы Google на конкретный лист
Я хотел бы открыть конкретный лист электронной таблицы Google из гиперссылки в другой электронной таблице.
У меня есть другая ссылка в моей главной электронной таблице, и у каждой должна быть гиперссылка на одну и ту же ведомую электронную таблицу, но на другой лист.
Я знаю функцию гиперссылки, но она не относится к конкретному листу.
Спасибо за помощь
5 ответов
Вы можете использовать эту функцию пользовательского сценария (Инструменты> Редактор сценариев) и связать ее, например, с пользовательским чертежом ("Вставка"> "Рисование"> "Сохранить и закрыть", затем щелкните правой кнопкой мыши новый чертеж> "Назначить сценарий..."> "goToSheet2")
function goToSheet2() {
goToSheet("Sheet2");
}
function goToSheet(sheetName) {
var sheet = SpreadsheetApp.getActive().getSheetByName(sheetName);
SpreadsheetApp.setActiveSheet(sheet);
}
Обновить:
В новейшей версии вы можете выбрать ячейку и добавить ссылку (Вставить> Ссылка) и напрямую выбрать ссылку на конкретный лист:
HYPERLINK
функция может ссылаться на другой лист в той же книге; если вы наблюдаете URL-адрес таблицы, в конце #gid=x
где x
уникален для каждого листа.
Проблема в том, что он откроет лист как новый экземпляр таблицы на другой вкладке, что, вероятно, нежелательно. Обходной путь может заключаться в вставке изображений или рисунков в виде кнопок и назначении им сценария, который активирует определенные листы.
Я лично сделал это на основе того, что @rejthy сказал: В скриптах я создал эту функцию:
/**
* Return the id of the sheet. (by name)
*
* @return The ID of the sheet
* @customfunction
*/
function GET_SHEET_ID(sheetName) {
var sheetId = SpreadsheetApp.getActive().getSheetByName(sheetName).getSheetId();
return sheetId;
}
и затем в моем листе, где мне нужна ссылка, я сделал это: =HYPERLINK("#gid="&GET_SHEET_ID("Factures - "&$B$1);"Année en cours")
Итак, из 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)
2-кортежный массив в вашем приложении, поэтому в итоге он выглядит примерно так: 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-го листа в ваших электронных таблицах, так как вы или кто-то другой, возможно, удалили исходный лист по умолчанию, как в моем примере выше.
Если вы хотите увидеть больше примеров использования API Sheets, вот несколько видео, которые я сделал (вместе с постами, которые вникают в каждый пример кода):
- Перенос данных SQL в пост с глубоким погружением в коде " Лист плюс"
- Форматирование текста с использованием Sheets API плюс код глубокого погружения
- Создание слайдов из данных электронной таблицы плюс код глубокого погружения
Затем, когда вы открываете мастер в пользовательском интерфейсе Sheets, вы можете переходить на любой из отдельных листов независимо от того, в каких файлах электронных таблиц они находятся. Если вы хотите, чтобы они автоматически открывались другим приложением или скриптом, большинство языков программирования предлагают разработчикам способы запуска веб-браузера с учетом целевого URL. В Python это было бы webbrowser
модуль ( документы):
import webbrowser
webbrowser.open_new(url) # or webbrowser.open_new_tab(url)
Если вы хотите создать ссылку на другой лист, который будет открывать лист в той же вкладке браузера, вот что вы хотите сделать:
1. Получить идентификатор листа. Проверьте ссылку в своем браузере, и вы увидите#gid=x
где x
- это идентификатор листа 2. Затем вы хотите установить формулу (гиперссылку) для ячейки и сделать ее отображаемой в виде гиперссылкиSpreadsheetApp.getActiveSheet().getRange("A1").setFormula('=HYPERLINK("#gid=X","test")').setShowHyperlink(true)
; Если вы не используетеsetShowHyperlink(true)
он будет отображаться как обычный текст.
По сути, это версия кода для обновления, предоставленного @rejthy выше.
Кроме того, вы можете попробовать создать пользовательскую функцию. Открыв таблицу, откройте меню " Сервис", затем " Редактор сценариев". Вставьте код в редактор:
/**
* Gets the Sheet ID from Sheet Name
*
* @param {string} input The Sheet Name
* @return The Sheet ID
* @customfunction
*/
function SHEETID(input) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var tab = ss.getSheetByName(input);
return tab.getSheetId();
}
Сохраните, обновите электронную таблицу и введите свою функцию
=SHEETID("Your Custom Sheet Name")
=SHEETID(A1)
И вуаля! Выводится уникальный идентификатор вкладки (в текущей электронной таблице). Вы можете гиперссылку на него, используя следующую формулу:
=HYPERLINK("#gid="&SHEETID(A1),"Link")