Посилання на певний аркуш у електронній таблиці Google


47

У мене складна електронна таблиця Google з багатьма аркушами та змістом. Чи існує якийсь спосіб створити посилання на назви аркушів, щоб одним клацанням можна було перейти безпосередньо до аркуша? Тобто: натискання на клітинку "sheet5" переходить на sheet5?


1
Тепер у електронних таблицях Google є така опція - ви можете вибрати посилання Вставити -> та вибрати таблиці в цій електронній таблиці. На жаль, у мене немає репутації, необхідної для того, щоб поставити це як відповідь.
Борис Страндєв

Відповіді:


59

Коли ви переходите на інший аркуш електронних таблиць Google, зверніть увагу на URL-адресу в адресному рядку веб-переглядача. В кінці URL-адреси ви повинні побачити щось на кшталт:

#gid=0

Це число змінюється при переключенні аркушів і вказує, який аркуш відображати. Скопіюйте всю URL-адресу та створіть до неї гіперпосилання за цією формулою:

=hyperlink("https://docs.google.com/spreadsheet/ccc?key=0AsaQpHJE_LShcDJ0dWNudHFZWVJqS1dvb3FLWkVrS0E#gid=0", "LINK TEXT")

Зі сценарієм

Я багато думав над цим питанням, коли я вперше написав цю відповідь, і придумав рішення, яке передбачає сценарій.

З електронними таблицями відкритим, клацніть Інструменти меню, а потім редактор скриптів ... . Вставте весь цей код у редактор:

function onOpen(event) {
  var ss = event.source;
  var menuEntries = [];
  menuEntries.push({name: "Go to sheet...", functionName: "showGoToSheet"});
  ss.addMenu("Tasks", menuEntries);
}

function showGoToSheet() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var allsheets = ss.getSheets();
  var app = UiApp.createApplication();
  app.setTitle("Go to sheet...").setWidth(800).setHeight(600);
  var table = app.createFlexTable();
  table.setCellPadding(5).setCellSpacing(0);
  var goToSheetClick = app.createServerHandler('handleGoToSheetClick');
  var widgets = [];
  for (var i = 0; i < allsheets.length; i++) {
    var sheet_name = allsheets[i].getName();
    widgets[i] = app.createHTML(sheet_name).setId(sheet_name).addClickHandler(goToSheetClick);
    table.setWidget(i, 1, widgets[i])
  }
  var panel = app.createSimplePanel();
  panel.add(table);
  app.add(panel);
  ss.show(app);
}

function handleGoToSheetClick(e) {
  var sheet_name = e.parameter.source;
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName(sheet_name);
  sheet.activate();
  var app = UiApp.getActiveApplication();
  app.close();
  return app;
}

Збережіть сценарій, а потім оновіть електронну таблицю. Через секунду-дві після довідки з’явиться нове меню « Завдання» . У цьому меню є один пункт: Перейти до аркуша ...

Завдання> Перейти до аркуша ...

Цей пункт меню відкриє панель із переліком назв усіх аркушів у поточній таблиці. Це не схоже на це, але якщо натиснути одне з назв аркуша, цей аркуш вийде на передню частину.


Як відповідь на інше питання, цей сценарій було вдосконалено, щоб містити прокручуваний вид і кнопки.


Так, я думаю, що це єдине життєздатне рішення на даний момент. На жаль, я не знайшов способу перекласти між назвою "Sheet5" та " gid=7.
Саймон Іст

Я не впевнений, що саме ти маєш на увазі. Аркуші нумеруються в порядку зліва починаючи з 0. Отже, якщо аркуш з назвою "Sheet5" знаходиться на gid=7, він повинен бути восьмим аркушем зліва.
Вільям Джексон

1
Я маю на увазі те, що ви не можете програмно дізнатися, що таке gidSheet5, лише вручну. Якщо позиція змінюється, вона gidзмінюється, і ви більше не можете надійно посилатися на неї.
Саймон Іст

Якщо ви знайдете спосіб зв’язування по імені, будь ласка, опублікуйте це!
Джо Касадонте

1
Кращий варіант доступний тут: stackoverflow.com/a/18518779/1814867
Mandar Pandit

7

Найкращий спосіб зробити це з мого досвіду - прив’язати функцію до кнопки / зображення. Єдиним недоліком є ​​те, що ви не можете передавати параметри разом зі скриптом, призначеним кнопці. У зв'язку з цим вам потрібно буде зробити функцію, характерну для кожної навігації, але вони можуть викликати в одному файлі сценарію.

Кроки:

Створіть зображення (Вставити -> зображення) та відформатуйте його за власним бажанням

Створіть власну функцію з наступним:

function showSheetByName(Name) {
   var ss = SpreadsheetApp.getActiveSpreadsheet();
   var sheet = ss.getSheetByName(Name);
   SpreadsheetApp.setActiveSheet(sheet);
}

а потім функція, характерна для вашої кнопки

function showSheet5() {
   showSheetByName("Sheet5");
}

Нарешті призначте цю функцію вашій кнопці

Assign Script...
showSheet5

Тепер ви повинні мати можливість натиснути на вашу кнопку та перейти до "Sheet5". Це також можна змінити, щоб перейти до певної області аркуша.


Замість додавання функції, характерної для кожної кнопки, ви можете жорстко закодувати її до переходу до аркуша, названого у "поточній комірці", наприклад, змінити другий рядок на читання var sheet = ss.getSheetByName(ss.getActiveCell().getValue()); - потім ви можете поставити "кнопку" на нерухоме місце на екрані і позначте його "Перейти до аркуша в поточній комірці" та призначте його "showSheetByName" (якому зараз не потрібен параметр). Для використання просто виділіть клітинку з назвою аркуша (наприклад, Sheet5) та натисніть кнопку. Це трохи непрямо, але працює, оскільки натискання на кнопку не видаляє фокус із виділеної комірки.
Мотті Стром
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.