Liên kết đến trang tính cụ thể trong bảng tính Google


47

Tôi có một bảng tính Google phức tạp với nhiều trang tính và mục lục. Có cách nào để tạo liên kết đến tên trang tính để chỉ với một lần nhấp, người ta có thể truy cập trực tiếp vào trang tính không? Đó là: nhấp vào ô "sheet5" chuyển sang sheet5?


1
Bây giờ có một tùy chọn như vậy trong bảng tính Google - bạn có thể chọn liên kết Chèn -> và chọn Trang tính trong bảng tính này. Rất tiếc, tôi không có danh tiếng cần thiết để đăng bài này như một câu trả lời.
Boris Strandjev

Câu trả lời:


59

Khi bạn chuyển sang một trang tính khác trong Bảng tính Google, hãy chú ý đến URL trong thanh địa chỉ của trình duyệt. Ở cuối URL, bạn sẽ thấy một cái gì đó như:

#gid=0

Số này thay đổi khi bạn chuyển đổi trang tính và chỉ định trang tính nào sẽ hiển thị. Sao chép toàn bộ URL và tạo một siêu liên kết đến nó với công thức này:

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

Với một kịch bản

Tôi đã suy nghĩ về câu hỏi này rất nhiều kể từ lần đầu tiên tôi viết câu trả lời này và tôi đã đưa ra một giải pháp liên quan đến một kịch bản.

Với sự mở bảng tính, nhấp vào Công cụ trình đơn, sau đó biên tập Script ... . Dán tất cả mã này vào trình chỉnh sửa:

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

Lưu tập lệnh, sau đó làm mới bảng tính. Sau một hoặc hai giây, một menu mới, Nhiệm vụ , sẽ xuất hiện sau Trợ giúp . Có một mục trong menu này: Chuyển đến trang tính ...

Nhiệm vụ> Chuyển đến trang tính ...

Mục menu này sẽ mở một bảng điều khiển với danh sách tên của tất cả các trang tính trong bảng tính hiện tại. Nó không giống như vậy, nhưng nếu bạn nhấp vào một trong các tên trang tính, trang tính đó sẽ xuất hiện ở phía trước.


Để trả lời cho một câu hỏi khác, tập lệnh này đã được cải thiện để bao gồm chế độ xem và nút có thể cuộn.


Vâng tôi nghĩ rằng đây là giải pháp khả thi duy nhất tại thời điểm này. Thật không may, tôi đã không tìm thấy một cách để dịch giữa tên "Sheet5" và gid=7.
Simon East

Tôi không chắc chính xác ý bạn là gì. Các tờ được đánh số theo thứ tự từ bên trái bắt đầu từ 0. Vì vậy, nếu một tờ có tên "Trang 5" ở gid=7thì nó sẽ là trang thứ tám từ bên trái.
William Jackson

1
Ý tôi là, bạn không thể tìm ra chương trìnhgid Sheet5 là gì , chỉ bằng tay. Nếu vị trí của nó thay đổi, nó sẽ gidthay đổi và bạn không còn có thể liên kết với nó một cách đáng tin cậy nữa.
Simon East

Nếu bạn tìm ra một cách để liên kết theo tên, xin vui lòng gửi nó!
Joe Casadonte

1
Tùy chọn tốt hơn Có sẵn tại đây: stackoverflow.com/a/18518779/1814867
Mandar Pandit

7

Cách tốt nhất để làm điều này theo kinh nghiệm của tôi là buộc một chức năng vào một nút / hình ảnh. Hạn chế duy nhất là bạn không thể truyền tham số cùng với tập lệnh được gán cho nút. Do đó, bạn sẽ cần tạo một hàm cụ thể cho từng điều hướng nhưng chúng có thể gọi là một tệp trong một tập lệnh.

Các bước:

Tạo một hình ảnh (Chèn -> hình ảnh) và định kiểu nó theo sở thích của bạn

Tạo một chức năng tùy chỉnh với các mục sau:

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

và sau đó là một chức năng cụ thể cho nút của bạn

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

Cuối cùng gán chức năng này cho nút của bạn

Assign Script...
showSheet5

Bây giờ bạn có thể nhấp vào nút của mình và điều hướng đến "Trang tính 5". Điều này cũng có thể được sửa đổi để đi đến một khu vực cụ thể của tờ.


Thay vì thêm một chức năng cụ thể cho từng nút, bạn có thể mã hóa nó để nhảy đến trang có tên trong "ô hiện tại", ví dụ thay đổi dòng thứ 2 để đọc var sheet = ss.getSheetByName(ss.getActiveCell().getValue()); - sau đó bạn có thể đặt "nút" trên một vị trí cố định trên màn hình và gắn nhãn "Chuyển đến trang tính trong ô hiện tại" và gán cho nó "showSheetByName" (hiện không cần tham số). Để sử dụng, chỉ cần tô sáng ô bằng tên trang tính (ví dụ Trang tính 5) và nhấp vào nút. Đó là một chút gián tiếp nhưng hoạt động vì nhấp vào nút không xóa tiêu điểm khỏi ô được tô sáng.
Motti Strom
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.