【发布时间】:2014-12-28 05:19:40
【问题描述】:
我知道 Google Apps 脚本有一个用于工作表类的 getSheetId() method,但是有没有办法通过引用 ID 在电子表格中选择工作表?
我在Spreadsheet Class documentation 中没有看到类似 getSheetById() 的内容。
【问题讨论】:
标签: google-apps-script google-sheets
我知道 Google Apps 脚本有一个用于工作表类的 getSheetId() method,但是有没有办法通过引用 ID 在电子表格中选择工作表?
我在Spreadsheet Class documentation 中没有看到类似 getSheetById() 的内容。
【问题讨论】:
标签: google-apps-script google-sheets
你可以使用这样的东西:
function getSheetById(id) {
return SpreadsheetApp.getActive().getSheets().filter(
function(s) {return s.getSheetId() === id;}
)[0];
}
var sheet = getSheetById(123456789);
然后要找到用于活动工作表的工作表 ID,运行它并检查日志或使用调试器。
function getActiveSheetId(){
var id = SpreadsheetApp.getActiveSheet().getSheetId();
Logger.log(id.toString());
return id;
}
【讨论】:
return sheets.find(sheet => sheet.getSheetId() === id) 创建一个衬里。前提是您创建了一个名为 sheet 的变量。
不确定 ID,但您可以通过工作表名称设置:
var ss = SpreadsheetApp.getActiveSpreadsheet();
ss.setActiveSheet(ss.getSheetByName("your_sheet_name"));
SpreadsheetApp 类有一个setActiveSheet method 和getSheetByName method。
【讨论】:
var sheetActive = SpreadsheetApp.openById("ID");
var sheet = sheetActive.getSheetByName("Name");
【讨论】:
查看您的 URL 以获取查询参数 #gid
在上面的例子中 gid=910184575,所以你可以这样做:
function getSheetById_test(){
var sheet = getSheetById(910184575);
Logger.log(sheet.getName());
}
function getSheetById(gid){
for each (var sheet in SpreadsheetApp.getActive().getSheets()) {
if(sheet.getSheetId()==gid){
return sheet;
}
}
}
【讨论】:
我很惊讶这个 API 不存在......这似乎是必不可少的。无论如何,这就是我在 GAS 实用程序库中使用的:
/**
* Searches within a given Google Spreadsheet for a provided Sheet ID and returns
* the Sheet if the sheet exists; otherwise it will return undefined if not found.
*
* @param {Spreadsheet} ss - a Google Spreadsheet object (https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet)
* @param {Integer} sheetId - the ID of a Google Sheet
* @return {Sheet} the Google Sheet object if found; otherwise undefined (https://developers.google.com/apps-script/reference/spreadsheet/sheet)
*/
function getSheetById(ss, sheetId) {
var foundSheets = ss.getSheets().filter(sheet => sheet.getSheetId() === sheetId);
return foundSheets.length ? foundSheets[0] : undefined;
}
【讨论】: