我有一個帶有 URL 的源作業表。這些 URL 指向其他電子表格中的特定目標作業表(選項卡)。(如果我手動單擊鏈接,它們會打開正確的選項卡/作業表。)
URL 如下所示:
https://docs.google.com/spreadsheets/d/<spreadsheetID>/edit?resourcekey=<ignored>#gid=<sheetid>. (“gid=NNN”部分標識要激活的電子表格中的作業表(選項卡)。)
我可以使用const sprd = SpreadsheetApp.openByUrl(url)以編程方式打開目標電子表格。但是要獲得特定的作業表(選項卡),我能找到的唯一有用的 API 是getActiveSheet()但記錄為回傳“顯示在 UI 中”的作業表。但是此電子表格未顯示在 UI 中。AFAICT,對于編程訪問,“活動”表始終只是電子表格中的第一個表,與傳遞給 openByUrl() 的 URL 中的“gid”無關。
作為一種解決方法,我可以從 URL 中決議出“#gid=NNNN”。然后 openByUrl() 電子表格,呼叫getSheets()并將從 URL 中提取的 gid.getSheetId()與每個作業表的 gid 進行比較,直到找到為止。AFAICT,沒有什么比getSheetByID()電子表格上的 API 更好的了。
我還缺少其他一些方法嗎?
uj5u.com熱心網友回復:
此功能要求您將 url 粘貼到提示中。它將通過 url 打開電子表格并獲取當前作業表上的所有資料并將其顯示在對話框中,最后將顯示作業表的名稱。
function getData() {
const ui = SpreadsheetApp.getUi();
const r = ui.prompt('Url Dialog', 'Enter Url', ui.ButtonSet.OK_CANCEL);
if (r.getSelectedButton() == ui.Button.OK) {
const url = r.getResponseText()
const ss = SpreadsheetApp.openByUrl(url);
let id = url.slice(url.indexOf("=") 1);
let sh = ss.getSheets().filter(sh => sh.getSheetId() == id)[0];
let vs = sh.getDataRange().getDisplayValues();
let s = '<textarea cols="50" rows="12"> ';
vs.forEach((r, i) => {
if (i > 0) {
s = ['\n'];
}
s = r.join(',');
})
s = `\nSheet Name: ${sh.getName()}</textarea>`
ui.showModelessDialog(HtmlService.createHtmlOutput(s).setWidth(800), 'Title');
}
}
網址對話框:

資料對話框:

向下滾動到底部以查看作業表名稱。
uj5u.com熱心網友回復:
出于檔案目的發布此資訊。
正如其他人所說,遍歷作業表以找到具有正確id.
最合適的方法是使用find:
const sheetId = url.match(/gid=([0-9] )/)[1];
const ss = SpreadsheetApp.openByUrl(url);
const sheet = ss.getSheets().find(sheet => sheet.getSheetId() == sheetId);
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/358818.html
