簡體   English   中英

如何打印工作表的名稱和 Google ID

[英]How to Print the names of the sheets and the Google ID

我試圖打印一列中 Google 電子表格中所有工作表的名稱,並在另一列中打印它們各自的 ID(URL 的一部分)。 到目前為止,這是我的腳本

function getSchedule() {
  var ss=SpreadsheetApp.openById("Sheet_ID");
  var sh=ss.getActiveSheet();
  var allSheets=ss.getSheets();
  var ids=[];
  for(var i=0;i<allSheets.length;i++)
  {
    ids[allSheets[i].getName()]=allSheets[i].getSheetId();
  }

  var invoicess = SpreadsheetApp.getActiveSpreadsheet();
  var schedule = invoicess.getSheetByName("Schedule");
  schedule.getRange("A1:B").clear();
  var headers = [["Sheet Name", "ID"]];
  schedule.getRange("A1:B1").setValues(headers);
  
  for(var d = 1; d=allSheets.length;d++){
  schedule.getRange(d+1,1).setValue(allSheets[d]);}
}
  

所以我相信 allSheets 應該是所有工作表名稱的數組,而 ids 是一個 ID 數組,但我認為應該打印 allSheets 數組值的最后一個 for 循環不打印任何內容。 我想讓它從單元格A2開始打印。 我還沒有 ID 循環。 誰能告訴我為什么在單元格中什么也沒有打印?

問題:

  • 以下行不會向數組添加新值: ids[allSheets[i].getName()]=allSheets[i].getSheetId();
  • 因此,數據不會添加到數組中,這就是您沒有在工作表中看到數據的原因。 相反,您應該使用push()將元素(行)添加到數組中。
  • 此外,由於您要粘貼值的二維數組,因此您需要使用setValues而不是setValue
  • 您的代碼使用了不必要的代碼行。 例如,您可以使用setValues在文件中添加標題,而您只需將其添加到將要附加數據的原始數組中即可。 您不需要 for 循環來使用setValues
  • 我通過刪除多余的調用改進了您的代碼,使其對 JavaScript 更加友好。

改進的解決方案:

function getSchedule() {
  const ss=SpreadsheetApp.openById("Sheet_ID");
  const invoicess = SpreadsheetApp.getActiveSpreadsheet();
  const schedule = invoicess.getSheetByName("Schedule");
  const allSheets = ss.getSheets();
  const ids = [["Sheet Name", "ID"]];
  allSheets.forEach(sh=>{
  ids.push([sh.getName(),sh.getSheetId()]);                  
  });   
  schedule.getRange("A1:B").clear();
  schedule.getRange(1,1,ids.length,ids[0].length).setValues(ids);
}

而不是這個ids[allSheets[i].getName()]=allSheets[i].getSheetId();

試試這個: ids.push([allSheets[i].getName(),allSheets[i].getSheetId()])

並在最后使用 setValues(ids) 。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM