Google 스프레드 시트의 특정 시트에 연결


47

많은 시트와 목차가있는 복잡한 Google 스프레드 시트가 있습니다. 클릭 한 번으로 시트로 직접 이동할 수 있도록 시트 이름에 대한 링크를 만드는 방법이 있습니까? 즉, "sheet5"셀을 클릭하면 sheet5로 전환됩니까?


1
이제 Google 스프레드 시트에는 이러한 옵션이 있습니다. 삽입-> 링크를 선택하고이 스프레드 시트에서 시트를 선택할 수 있습니다. 유감스럽게도 나는 이것을 답변으로 게시하는 데 필요한 명성을 얻지 못했습니다.
Boris Strandjev

답변:


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

스크립트를 저장 한 다음 스프레드 시트를 새로 고치십시오. 1-2 초 후에 새로운 메뉴 인 TasksHelp 뒤에 나타납니다 . 이 메뉴에는 한 가지 항목이 있습니다 : 시트로 이동 ...

작업> 시트로 이동 ...

이 메뉴 항목은 현재 스프레드 시트의 모든 시트 이름 목록이있는 패널을 엽니 다. 모양이 아니지만 시트 이름 중 하나를 클릭하면 해당 시트가 맨 앞에옵니다.


다른 질문에 대한 답변으로, 이 스크립트는 스크롤 가능한보기 및 버튼을 포함하도록 개선되었습니다 .


네, 이것이 유일하게 가능한 해결책이라고 생각합니다. 불행히도 나는 "Sheet5"이름과 사이를 번역하는 방법을 찾지 못했습니다 gid=7.
Simon East

무슨 말인지 정확히 모르겠습니다. 시트는 0부터 시작하여 왼쪽부터 순서대로 번호가 매겨집니다. 따라서 "Sheet5"라는 시트가에 gid=7있으면 왼쪽에서 8 번째 시트 여야합니다.
윌리엄 잭슨

1
내 말은, 당신은 프로그래밍 방식으로gid Sheet5가 무엇인지 수동으로 찾을 수 없다는 것 입니다. 위치가 변경되면 gid변경되며 더 이상 안정적으로 연결할 수 없습니다.
Simon East

이름으로 링크하는 방법을 알고 있다면 게시하십시오!
Joe Casadonte

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)이있는 셀을 강조 표시하고 단추를 클릭하십시오. 약간 간접적이지만 버튼을 클릭해도 강조 표시된 셀에서 포커스가 제거되지 않기 때문에 작동합니다.
Motti Strom 2016
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.