Tautkan ke sheet tertentu di Google spreadsheet

47

Saya memiliki spreadsheet Google yang rumit dengan banyak lembar dan daftar isi. Apakah ada cara untuk membuat tautan ke nama lembar sehingga dengan satu klik langsung ke lembar? Yaitu: mengklik sel "sheet5" beralih ke sheet5?

JBBahkan lebih lanjut
sumber
1
Sekarang ada opsi seperti itu di spreadsheet Google - Anda dapat memilih tautan Sisipkan -> dan pilih Lembar di spreadsheet ini. Dengan menyesal, saya tidak memiliki reputasi yang diperlukan untuk memposting ini sebagai jawaban.
Boris Strandjev

Jawaban:

59

Saat Anda beralih ke sheet berbeda di Google Spreadsheets, perhatikan URL di bilah alamat browser Anda. Di akhir URL Anda akan melihat sesuatu seperti:

#gid=0

Nomor ini berubah ketika Anda mengganti lembar, dan menentukan lembar mana yang akan ditampilkan. Salin seluruh URL dan buat hyperlink ke sana dengan rumus ini:

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

Dengan naskah

Saya sudah banyak memikirkan pertanyaan ini sejak pertama kali menulis jawaban ini, dan saya menemukan solusi yang melibatkan skrip.

Dengan terbuka spreadsheet, klik Alat menu, kemudian Script editor ... . Rekatkan semua kode ini ke editor:

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;
}

Simpan skrip, lalu segarkan spreadsheet. Setelah satu atau dua detik menu baru, Tugas , akan muncul setelah Bantuan . Ada satu item dalam menu ini: Pergi ke sheet ...

Tugas> Pergi ke sheet ...

Item menu ini akan membuka panel dengan daftar nama semua lembar di spreadsheet saat ini. Itu tidak terlihat seperti itu, tetapi jika Anda mengklik salah satu nama lembar, lembar itu akan datang ke depan.


Sebagai jawaban untuk pertanyaan lain, skrip ini ditingkatkan untuk menyertakan tampilan dan tombol yang dapat digulir.

William Jackson
sumber
Ya saya pikir ini adalah satu-satunya solusi saat ini. Sayangnya saya belum menemukan cara untuk menerjemahkan antara nama "Sheet5" dan gid=7.
Simon East
Saya tidak yakin apa yang Anda maksud. Lembaran diberi nomor dalam urutan dari kiri mulai dari 0. Jadi jika lembaran bernama "Sheet5" di gid=7, itu harus lembar kedelapan dari kiri.
William Jackson
1
Maksud saya adalah, Anda tidak bisa mengetahui secara terprogram apa itu gidSheet5, hanya secara manual. Jika posisinya berubah, itu gidberubah, dan Anda tidak dapat lagi menautkannya dengan andal.
Simon East
Jika Anda menemukan cara untuk menautkan dengan nama, silakan kirim!
Joe Casadonte
1
Opsi Lebih Baik Tersedia di sini: stackoverflow.com/a/18518779/1814867
Mandar Pandit
7

Cara terbaik untuk melakukan ini dari pengalaman saya adalah mengikat fungsi ke tombol / gambar. Satu-satunya kelemahan adalah bahwa Anda tidak dapat melewatkan parameter bersama dengan skrip yang ditetapkan untuk suatu tombol. Karena ini, Anda harus membuat fungsi khusus untuk setiap navigasi tetapi mereka dapat memanggil menjadi dalam file skrip tunggal.

Langkah:

Buat gambar (Sisipkan -> gambar) dan gaya sesuai keinginan Anda

Buat fungsi khusus dengan yang berikut:

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

dan kemudian fungsi khusus untuk tombol Anda

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

Akhirnya tetapkan fungsi ini ke tombol Anda

Assign Script...
showSheet5

Anda sekarang harus dapat mengklik tombol Anda dan menavigasi ke "Sheet5". Ini juga dapat dimodifikasi untuk pergi ke area spesifik lembar juga.

LoganDell
sumber
Alih-alih menambahkan fungsi khusus untuk setiap tombol, Anda dapat mengubah kode ke lompatan ke lembar bernama dalam "sel saat ini", misalnya mengubah baris ke-2 untuk dibaca var sheet = ss.getSheetByName(ss.getActiveCell().getValue()); - Anda kemudian dapat meletakkan "tombol" pada tempat yang tetap di layar dan beri label "Langsung ke lembar dalam sel saat ini" dan tetapkan "showSheetByName" (yang sekarang tidak memerlukan parameter). Untuk menggunakannya, cukup sorot sel dengan nama lembar (mis. Sheet5) dan klik tombol. Ini sedikit tidak langsung tetapi berfungsi karena mengklik tombol tidak menghilangkan fokus dari sel yang disorot.
Motti Strom