Гиперссылка таблицы 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, вот несколько видео, которые я сделал (вместе с постами, которые вникают в каждый пример кода):

Затем, когда вы открываете мастер в пользовательском интерфейсе 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")