web-dev-qa-db-ja.com

Googleスプレッドシートの特定のシートへのリンク

多くのシートと目次を含む複雑なGoogleスプレッドシートがあります。クリックしてシート名に直接移動できるように、シート名へのリンクを作成する方法はありますか?つまり、セル「sheet5」をクリックすると、sheet5に切り替わりますか?

47
JBWhitmore

Googleスプレッドシートで別のシートに切り替えるときは、ブラウザのアドレスバーのURLに注意してください。 URLの最後に次のようなものが表示されます。

#gid=0

この番号は、シートを切り替えると変わり、表示するシートを指定します。 URL全体をコピーし、次の式を使用してハイパーリンクを作成します。

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

スクリプト付き

この質問を最初に書いて以来、この質問についてよく考えてきました。スクリプトを使用したソリューションを思いつきました。

スプレッドシートを開いた状態で、Toolsメニューをクリックしてから、Script 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;
}

スクリプトを保存してから、スプレッドシートを更新します。 1、2秒後、新しいメニューTasksHelpの後に表示されます。このメニューには1つの項目があります:Go to sheet ...

Tasks > Go to sheet...

このメニュー項目は、現在のスプレッドシート内のすべてのシートの名前のリストを含むパネルを開きます。見た目は似ていませんが、シート名のいずれかをクリックすると、そのシートが前面に表示されます。


別の質問への回答として、 このスクリプトは改善されました スクロール可能なビューとボタンを含めます。

59
William Jackson

私の経験からこれを行う最良の方法は、機能をボタン/画像に結び付けることです。唯一の欠点は、ボタンに割り当てられたスクリプトとともにパラメーターを渡すことができないことです。このため、各ナビゲーションに固有の関数を作成する必要がありますが、単一のスクリプトファイルで呼び出すことができます。

手順:

画像を作成し(挿入->画像)、好みに合わせてスタイルを設定します

次を使用してカスタム関数を作成します。

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

次に、ボタンに固有の機能

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

最後に、この機能をボタンに割り当てます

Assign Script...
showSheet5

これで、ボタンをクリックして「Sheet5」に移動できるようになります。これは、シートの特定の領域に移動するように変更することもできます。

7
LoganDell