У меня сложная электронная таблица Google с множеством листов и оглавлением. Есть ли способ создать ссылку на имена листов, чтобы одним щелчком мыши можно было перейти непосредственно к листу? То есть: нажав на ячейку «лист5» переключается на лист5?
У меня сложная электронная таблица Google с множеством листов и оглавлением. Есть ли способ создать ссылку на имена листов, чтобы одним щелчком мыши можно было перейти непосредственно к листу? То есть: нажав на ячейку «лист5» переключается на лист5?
Ответы:
Когда вы переключаетесь на другой лист в Google Spreadsheets, обратите внимание на 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;
}
Сохраните сценарий, затем обновите электронную таблицу. Через секунду или две после Справки появится новое меню Задачи . В этом меню есть один пункт: Перейти на лист ...
Этот пункт меню откроет панель со списком имен всех листов в текущей электронной таблице. Это не похоже на это, но если вы нажмете на одно из имен листов, этот лист выйдет вперед.
Как ответ на другой вопрос, этот скрипт был улучшен, чтобы включить прокручиваемый вид и кнопки.
gid=7
.
gid=7
, это должен быть восьмой лист слева.
gid
Sheet5, только вручную. Если позиция меняется, она gid
меняется, и вы больше не можете надежно на нее ссылаться.
Из моего опыта лучший способ сделать это - привязать функцию к кнопке / изображению. Единственным недостатком является то, что вы не можете передавать параметры вместе со сценарием, назначенным кнопке. В связи с этим вам нужно будет создать функцию, специфичную для каждой навигации, но они могут вызываться в одном файле сценария.
шаги:
Создайте изображение («Вставка» -> «Изображение») и настройте его по своему вкусу.
Создайте пользовательскую функцию со следующим:
function showSheetByName(Name) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName(Name);
SpreadsheetApp.setActiveSheet(sheet);
}
а затем функция, специфичная для вашей кнопки
function showSheet5() {
showSheetByName("Sheet5");
}
Наконец, назначьте эту функцию вашей кнопке
Assign Script...
showSheet5
Теперь вы сможете нажать на кнопку и перейти к «Листу 5». Это также можно изменить, чтобы перейти к определенной области листа.
var sheet = ss.getSheetByName(ss.getActiveCell().getValue());
- затем вы можете поместить «кнопку» в фиксированное место на экране. и пометить его «Перейти к листу в текущей ячейке» и назначить его «showSheetByName» (которому теперь не нужен параметр). Чтобы использовать, просто выделите ячейку с именем листа (например, Sheet5) и нажмите кнопку. Это немного косвенно, но работает, потому что нажатие на кнопку не удаляет фокус из выделенной ячейки.