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

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

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

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


person ulisse    schedule 15.11.2012    source источник


Ответы (6)


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

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

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

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

person rejthy    schedule 29.08.2013
comment
Лучший ответ и вариант, приведенный здесь, Обновление:. - person Mandar Pandit; 30.04.2017

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

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

person AdamL    schedule 15.11.2012
comment
Невероятно, но это не стандартная функция. Спасибо за обходной путь - person Brandon; 05.02.2013
comment
Я нашел этот ответ полезным ... Просто добавление комментария: открытие в другой вкладке [браузера] действительно является проблемой только в том случае, если вы связываете этот лист из того же документа электронной таблицы. Если ваш пример похож на мой, вы связываете HTML-страницу или вики-страницу с конкретным рабочим листом, тогда не беспокойтесь ... трюк с #gid работает (ПОКА никто не удаляет вкладки рабочего листа ... очень важно отметить что #gid является номером ФИКСИРОВАННОЙ ПОЗИЦИИ, поэтому 4-й рабочий лист слева будет # gid = 3). - person Scott Prive; 15.07.2014

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

person Adrien Schaegis    schedule 15.08.2017

Итак, что я понимаю из 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

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

/**
 * 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")
person Matthew    schedule 20.09.2017

Если вы хотите создать ссылку на другой лист, который будет открывать лист на той же вкладке браузера, вот что вы хотите сделать: 1. Получить идентификатор листа. Проверьте ссылку в своем браузере, и вы увидите #gid=x, где x - идентификатор листа 2. Затем вы хотите установить формулу (гиперссылку) для ячейки и сделать ее отображаемой в виде гиперссылки SpreadsheetApp.getActiveSheet().getRange("A1").setFormula('=HYPERLINK("#gid=X","test")').setShowHyperlink(true); Если вы не используете setShowHyperlink(true), он будет показан как обычный текст.

По сути, это версия кода для обновления, предоставленного @rejthy выше.

person Pasha    schedule 17.06.2020