別のスプレッドシートのハイパーリンクからGoogleスプレッドシートの特定のシートを開きたいのですが。
マスタースプレッドシートに異なるリンクがあり、それぞれに同じスレーブスプレッドシートへのハイパーリンクが必要ですが、異なるシートへのリンクです。
ハイパーリンク機能は知っていますが、特定のシートに行きません。
このカスタムスクリプト([ツール]> [スクリプトエディター])機能を使用して、たとえばカスタム図面(挿入>図面...>保存して閉じる、新しい図面を右クリック>スクリプトの割り当て...> "goToSheet2")
function goToSheet2() {
goToSheet("Sheet2");
}
function goToSheet(sheetName) {
var sheet = SpreadsheetApp.getActive().getSheetByName(sheetName);
SpreadsheetApp.setActiveSheet(sheet);
}
更新:
最新バージョンでは、セルを選択してリンクを追加し([挿入]> [リンク])、特定のシートへのリンクを直接選択できます。
HYPERLINK
関数can同じブック内の別のシートへのリンク。スプレッドシートのURLを確認すると、その末尾に#gid=x
があり、x
は各シートで一意です。
問題は、別のタブでスプレッドシートの新しいインスタンスとしてシートを開くことです。これはおそらく望ましくありません。回避策は、ボタンとして画像または描画を挿入し、特定のシートをアクティブにするスクリプトをそれらに割り当てることです。
私は個人的に@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")
または、カスタム関数を作成してみることもできます。スプレッドシートを開いた状態で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")
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
を使用する場合の注意事項:
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)