【问题标题】:Can you delete a specific sheet without knowing sheet ID?您可以在不知道工作表 ID 的情况下删除特定工作表吗?
【发布时间】:2021-12-19 20:19:56
【问题描述】:

我有执行以下操作的代码:

  1. 从第一个工作表“OTW Sheet”收集值
  2. 按 ID 打开另一个现有工作表 - “发票”
  3. 在“发票”中设置从“OTW 表”复制的值
  4. 在云端硬盘应用中创建一个新的电子表格并将“发票”复制到新的电子表格中。

这一切都很好,但下一步是删除新创建的电子表格中名为“Sheet1”的工作表。这部分我无法开始工作。没有出现错误,只是删除工作表失败。

代码如下:

function myFunction() {
  
  var orderSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("OTW Sheet");
  var row = OrderSheet.getLastRow();
  var values1 = OrderSheet.getRange(row, 5).getValue();
  var cost1 = OrderSheet.getRange(1, 16).getValue();

  var invoice = SpreadsheetApp.openById("19wv72wCNsPV6_hK8XCRcMBkfzEEU1IrJB6scuPz2Vfo"); 
  invoice.getSheetByName("BLANK");
  
  var newsheet = Invoice.getActiveSheet();
  newsheet.getRange(17, 7).setValue(cost1);
  newsheet.getRange(1, 15).setValue(values1);

  var newSS = SpreadsheetApp.create('OTW Invoice'); 
  newsheet.copyTo(NewSS).setName('OTW Invoice ' + cost1).getSheetId();
  var folder = DriveApp.getFoldersByName("TEST Invoices").next();
  var copyFile = DriveApp.getFileById(newSS.getId());
  folder.addFile(CopyFile);

  newSS.getId();
  SpreadsheetApp.openById(NewSS).getSheetByName("Sheet1").deleteSheet();
}

【问题讨论】:

  • 为什么不能得到电子表格的ID?如果您询问的是 Sheet 类的组件,那么您只需要名称,因为所有工作表都必须具有唯一的名称
  • 因为它只是刚刚创建,我希望脚本在 1 go 中运行我的功能,我无法手动获取它。 getId 似乎并没有做我想做的事。
  • 是的,但是 NewSS.getId() 会得到你的 id
  • 如果您的代码不起作用,请提供minimal reproducible example,我会帮您解决。请阅读minimal reproducible example 的要求我不希望有很长的代码我只需要您询问的部分和重现您希望解决的问题的部分。

标签: google-apps-script google-sheets


【解决方案1】:

替换

  NewSS.getId();
  SpreadsheetApp.openById(NewSS).getSheetByName("Sheet1").deleteSheet();

通过

NewSS.deleteSheet(NewSS.getSheetByName("Sheet1"));

参考

【讨论】:

    【解决方案2】:

    删除新创建的电子表格的工作表

    这行得通:

    function myFunction() {
      const ss = SpreadsheetApp.openById("ssid");
      const sh = ss.getActiveSheet();
      const nss = SpreadsheetApp.create('OTW Invoice');
      sh.copyTo(nss).setName('OTW Invoice ' + ' Copy');
      const fldr = DriveApp.getFoldersByName("TestFolder").next();//assume only one
      const file = DriveApp.getFileById(nss.getId());
      fldr.addFile(file);//move nss to a subfolder
      nss.deleteSheet(nss.getSheetByName("Sheet1"));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-12
      • 1970-01-01
      相关资源
      最近更新 更多