Гиперссылка на конкретный лист

Я хотел бы открыть конкретный лист Google Sheets по гиперссылке в другой электронной таблице.

У меня есть разные ссылки в моей главной электронной таблице, и у каждой должна быть гиперссылка на одну и ту же ведомую электронную таблицу, но на другой лист.

Я знаю функцию гиперссылки, но она не идет на конкретный лист.

Ответ 1

Вы можете использовать эту специальную функцию script (Tools > script Editor) и подключить ее, например. (Вставкa > Рисование... > Сохранить и закрыть, затем щелкните правой кнопкой мыши новый чертеж > Назначить Script... > "goToSheet2" )

function goToSheet2() {
  goToSheet("Sheet2");
}

function goToSheet(sheetName) {
  var sheet = SpreadsheetApp.getActive().getSheetByName(sheetName);
  SpreadsheetApp.setActiveSheet(sheet);
}

Update:
В новейшей версии вы можете выбрать ячейку и добавить ссылку (Вставить > Ссылка) и напрямую выбрать ссылку на конкретный лист:
Вставить ссылку на лист.

Ответ 2

Функция HYPERLINK может ссылаться на другой лист в той же книге; если вы видите URL-адрес электронной таблицы, то в конце ее есть #gid=x, где x является уникальным для каждого листа.

Проблема заключается в том, что он откроет лист как новый экземпляр таблицы на другой вкладке, что, вероятно, нежелательно. Обходным путем было бы вставить изображения или рисунки в виде кнопок и присвоить им script, которые активируют определенные листы.

Ответ 3

Я лично сделал это на основе того, что сказал @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")

Ответ 4

Итак, что я понимаю из OP, так это то, что у вас есть одна главная электронная таблица, в которой вы хотите иметь ссылки на отдельные листы, где один или несколько из этих листов могут быть в одном или нескольких файлах электронных таблиц.

Функция HYPERLINK только превращает URL в гиперссылку и действительно полезна только тогда, когда вы хотите иметь гипертекст, а не только ссылку. Если вы вводите необработанный URL-адрес в качестве данных, он автоматически превращается в гиперссылку, поэтому нет дополнительной работы.

Как упоминалось в других ответах, решение состоит в том, чтобы URL-адрес электронной таблицы затем использовал значение gid для вычисления ссылки на нужный лист в электронной таблице. Вы можете написать простое приложение, которое собирает все ссылки отдельных листов и записывает их в мастер.

Ниже приведены некоторые фрагменты псевдокода (Python), которые могут помочь вам приступить к работе. Я оставляю весь код шаблона auth, но если вам это нужно, см. этот пост в блоге и это видео. В приведенном ниже коде предполагается, что конечная точка службы 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-интерфейсов, здесь представлено больше видеороликов (наряду с сообщениями, которые вникают в каждый пример кода):

Затем, когда вы открываете мастер в пользовательском интерфейсе "Листы", вы можете совершать клики по любому листу, независимо от того, какие файлы электронных таблиц они находятся. Если вы хотите, чтобы они автоматически открывались другим приложением или script, большинство языки программирования предлагают разработчикам способы запуска веб-браузера с учетом целевого URL-адреса. В Python это будет модуль webbrowser (docs):

import webbrowser
webbrowser.open_new(url) # or webbrowser.open_new_tab(url)

Ответ 5

В качестве альтернативы вы можете попробовать создать пользовательскую функцию. Открыв таблицу, откройте меню Сервис, затем Script editor.... Вставьте код в редактор:

/**
 * 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")

Ответ 6

Можно ли ссылаться на конкретную ячейку при создании гиперссылки между листами?