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 초 후에 새로운 메뉴 인 Tasks 가 Help 뒤에 나타납니다 . 이 메뉴에는 한 가지 항목이 있습니다 : 시트로 이동 ...

작업> 시트로 이동 ...

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


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


네, 이것이 유일하게 가능한 해결책이라고 생각합니다. 불행히도 나는 "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.