繁体   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