web-dev-qa-db-ja.com

特定のシートへのハイパーリンク

別のスプレッドシートのハイパーリンクからGoogleスプレッドシートの特定のシートを開きたいのですが。

マスタースプレッドシートに異なるリンクがあり、それぞれに同じスレーブスプレッドシートへのハイパーリンクが必要ですが、異なるシートへのリンクです。

ハイパーリンク機能は知っていますが、特定のシートに行きません。

11
ulisse

このカスタムスクリプト([ツール]> [スクリプトエディター])機能を使用して、たとえばカスタム図面(挿入>図面...>保存して閉じる、新しい図面を右クリック>スクリプトの割り当て...> "goToSheet2")

function goToSheet2() {
  goToSheet("Sheet2");
}

function goToSheet(sheetName) {
  var sheet = SpreadsheetApp.getActive().getSheetByName(sheetName);
  SpreadsheetApp.setActiveSheet(sheet);
}

更新:
最新バージョンでは、セルを選択してリンクを追加し([挿入]> [リンク])、特定のシートへのリンクを直接選択できます。
Insert link to sheet.

13
rejthy

HYPERLINK関数can同じブック内の別のシートへのリンク。スプレッドシートのURLを確認すると、その末尾に#gid=xがあり、xは各シートで一意です。

問題は、別のタブでスプレッドシートの新しいインスタンスとしてシートを開くことです。これはおそらく望ましくありません。回避策は、ボタンとして画像または描画を挿入し、特定のシートをアクティブにするスクリプトをそれらに割り当てることです。

9
AdamL

私は個人的に@rejthyが言ったことに基づいてこれを行いました:スクリプトでこの関数を作成しました:

/**
 * Return the id of the sheet. (by name)
 *
 * @return The ID of the sheet
 * @customfunction
 */
function GET_SHEET_ID(sheetName) {
    var sheetId = SpreadsheetApp.getActive().getSheetByName(sheetName).getSheetId();
    return sheetId;
}

そして、私がリンクを必要とする私のシートで私はこれをしました:=HYPERLINK("#gid="&GET_SHEET_ID("Factures - "&$B$1);"Année en cours")

2
Adrien Schaegis

または、カスタム関数を作成してみることもできます。スプレッドシートを開いた状態でToolsメニューをクリックし、次にScript editor ...をクリックします。コードをエディターに貼り付けます。

/**
 * Gets the Sheet ID from Sheet Name
 *
 * @param {string} input The Sheet Name
 * @return The Sheet ID
 * @customfunction
 */
function SHEETID(input) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var tab = ss.getSheetByName(input);
  return tab.getSheetId();
}

スプレッドシートを保存して更新し、カスタム関数を入力します

=SHEETID("Your Custom Sheet Name")

=SHEETID(A1)

そして出来上がり! (現在のスプレッドシート内の)タブの一意のIDが出力されます。次の式を使用して、ハイパーリンクを設定できます。

=HYPERLINK("#gid="&SHEETID(A1),"Link")
0
Matthew

OPから私が理解しているのは、個々のシートへのリンクが必要なマスタースプレッドシートが1つあり、それらのシートの1つまたは複数が単一または複数のスプレッドシートファイルにある場合があるということです。

HYPERLINK関数は、URLをハイパーリンクに変換するだけで、リンクだけでなくハイパーテキストが必要な場合にのみ役立ちます。データとして生のURLを入力すると、自動的にハイパーリンクに変換されるため、追加の作業はありません。

他の回答で述べたように、解決策はスプレッドシートのURLを取得し、gid値を使用してスプレッドシート内の目的のシートへのリンクを計算することです。個々のシートのリンクをすべて収集してマスターに書き込むシンプルなアプリを作成できます。

以下は、始めるのに役立つ疑似コード(Python)のスニペットです。ボイラープレート認証コードはすべて省略しますが、必要な場合は このブログ投稿 および このビデオ を参照してください。以下のコードは、APIサービスのエンドポイントがSHEETSであることを前提としています。

これにより、ターゲットスプレッドシートが読み取られ、各シートのリンクが作成されます。

# open target Sheet, get all sheets & Sheet URL
SHEET_ID = TARGET_SHEET_DRIVE_FILE_ID
res = SHEETS.spreadsheets().get(spreadsheetId=SHEET_ID,
        fields='sheets,spreadsheetUrl').execute()
sheets = res.get('sheets', [])
url = res['spreadsheetUrl']

# for each sheet, dump out its name & full URL
for sheet in sheets:
    data = sheet['properties']
    print('** Sheet title: %r' % data['title'])
    print(' - Link: %s#gid=%s' % (url, data['sheetId']))

画面に出力する代わりに、それらをアプリの(name, URL) 2-Tuple配列に保存したとしましょう。つまり、最終的には、次のようなsheet_dataというリストのようになります。

sheet_data = [
    ('Intro', 'https://docs.google.com/spreadsheets/d/SHEET_ID/edit#gid=5'),
    ('XData', 'https://docs.google.com/spreadsheets/d/SHEET_ID/edit#gid=3'),
    ('YData', 'https://docs.google.com/spreadsheets/d/SHEET_ID/edit#gid=7')
]

次に、これらをマスターに(左上隅のセルA1から)次のように書き込むことができます。

SHEET_ID = MASTER_SHEET_DRIVE_FILE_ID
SHEETS.spreadsheets().values().update(
    spreadsheetId=SHEET_ID, range='A1',
    body={'values': sheet_data},
    valueInputOption='USER_ENTERED'
).execute()

gidを使用する場合の注意事項:

  • 作成された最初のデフォルトシート(Sheet1)には常にgid=0があります。
  • その後追加するシートには、ランダムなgidが付けられます。
  • スプレッドシートの最初のシートのgid=0を使用しないでください。ただし、上記の例のように、あなたや他の誰かが元のデフォルトシートを削除した可能性があります。

Sheets APIの使用例をもっとご覧になりたい場合は、ここに私が作成したその他のビデオ(および各コードサンプルを詳しく説明する投稿)を示します。

その後、スプレッドシートのUIでマスターを開くと、どのスプレッドシートファイルが含まれているかに関係なく、個々のシートにクリックスルーできます。別のアプリやスクリプトで自動的に開く場合は、ほとんどのプログラミング言語で開発者にターゲットURLを指定してWebブラウザーを起動する方法。 Pythonでは、webbrowserモジュールになります( docs ):

import webbrowser
webbrowser.open_new(url) # or webbrowser.open_new_tab(url)
0
wescpy