你好。我正在嘗試創建一個腳本,該腳本將查看驅動器中的所有電子表格并搜索具有特定名稱的作業表并回傳作業表 URL/ID 和電子表格名稱
這是我到目前為止得到的,但它真的很慢而且效率不高, 因為我在驅動器中有大約 190 個 Google 表格,并且我正在尋找的每個表格名稱在 190 個中的大約 20 個中有一個表格
我認為,如果有一種方法可以通過在驅動器中搜索作業表名稱來做到這一點,這樣它就可以將我所有的谷歌作業表縮小到僅包含作業表名稱值的谷歌作業表,這可能會使其更快,但我不知道如何這樣做,我認為它對我來說不夠快
非常感謝你用你的專業精神幫助我
function getSheetNames(text = "Sheet Name To Search for") {
var arraywithfoundsheets = [];
var sp = SpreadsheetApp;
// Get all Sheets in drive
var allsheets = DriveApp.getFilesByType(MimeType.GOOGLE_SHEETS);
//loop thru all spredsheets
while (allsheets.hasNext()) {
var spreadsheet = sp
.open(allsheets.next());
// return an array with all the sheet names from the spreadsheet
var allsheetsinspreadsheet = spreadsheet.getSheets()
.map(su => su.getName())
// if this spredsheet contains a sheet with the specified name
if (allsheetsinspreadsheet.indexOf(text) > -1) {
// add the sheet with the specified name to the array
arraywithfoundsheets.push([spreadsheet.getUrl()
'#gid='
spreadsheet.
getSheetByName(allsheetsinspreadsheet[allsheetsinspreadsheet.indexOf(text)])
.getSheetId(),spreadsheet.getName()]);
}
}
Logger.log(arraywithfoundsheets);
return arraywithfoundsheets;
}
uj5u.com熱心網友回復:
可能這會快一點(如果它可以作業,我還沒有嘗試過):
function getSheetNames(text = "Sheet Name To Search for") {
var arraywithfoundsheets = [];
var sp = SpreadsheetApp;
// Get all Sheets in drive
var allsheets = DriveApp.getFilesByType(MimeType.GOOGLE_SHEETS);
//loop thru all spredsheets
while (allsheets.hasNext()) {
var spreadsheet = sp.open(allsheets.next());
var sheet = spreadsheet.getByName(text); // no need to find for the sheet if you have its name
if (!sheet) continue; // skip if there is no sheet with such name
arraywithfoundsheets.push([
spreadsheet.getUrl() '#gid=' sheet.getSheetId(), // if you have the sheet already you can get its ID directly
spreadsheet.getName()
]);
}
Logger.log(arraywithfoundsheets);
return arraywithfoundsheets;
}
它減少了對服務器的呼叫。但實際上我認為不可能讓腳本更快地引人注目。
uj5u.com熱心網友回復:
這確實運行,但打開每個電子表格需要很長時間:
function getSheetUrlId(name = 'Sheet4') {
const ss = SpreadsheetApp.getActive()
const fit = DriveApp.getFilesByType(MimeType.GOOGLE_SHEETS);
let shts = [];
while (fit.hasNext()) {
let ss = SpreadsheetApp.openById(fit.next().getId());
if (ss) {
let sh = ss.getSheetByName(name);
if (sh) {
let ssurl = ss.getUrl();
let shid = sh.getSheetId();
let url = `${ssurl}#gid=${shid}`
shts.push({ url: url, id: sh.getSheetId(), name: sh.getName() });
}
}
}
Logger.log(JSON.stringify(shts));
}
我懷疑使用 Sheets API 的解決方案可能會提供更快的解決方案。有點我對自己找出答案不感興趣。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/360218.html
