当前位置: 首页 > 知识库问答 >
问题:

Google sheets appscript将选项卡复制到新工作表

融伯寅
2023-03-14

我有一个大约190个选项卡的谷歌表,我需要分成190个不同的文件文件需要命名为相同的选项卡,选项卡的内容需要复制为值,但我也需要把格式(只是没有公式)。

我环顾四周,通过前面的问题和答案,再加上使用函数列表帮助,形成了以下代码。它实际上适用于前几个选项卡,但随后抛出一个错误,即无法删除唯一的工作表。

    function copySheetsToSS() {
  var ss = SpreadsheetApp.getActive();
  for(var n in ss.getSheets()){
    var sheet = ss.getSheets()[n];// look at every sheet in spreadsheet
    var name = sheet.getName();//get name
    if(name != 'master' && name != 'test'){ // exclude some names
      var alreadyExist = DriveApp.getFilesByName(name);// check if already there
      while(alreadyExist.hasNext()){
        alreadyExist.next().setTrashed(true);// delete all files with this name
      }
      var copy = SpreadsheetApp.create(name);// create the copy
sheet.copyTo(copy);     
copy.deleteSheet(copy.getSheets()[0]);// remove original "Sheet1"
copy.getSheets()[0].setName(name);// rename first sheet to same name as SS
      
      
var target_sheet = copy.getSheetByName(name);
var source_range = sheet.getRange("A1:M50");
var target_range = target_sheet.getRange("A1:M50");
      
var values = source_range.getValues();

target_range.setValues(values);

    }
  }
}

我希望有人能告诉我我做错了什么,因为我现在还不明白。我也对更好的解决方案持开放态度,不过请注意,我是google appscript的初学者,请不要太复杂。

谢谢你

共有1个答案

罗允晨
2023-03-14

但是,请注意,对服务的调用,例如SpreadsheetApp是异步的。

脚本运行的时间越长,这一点就越明显。

在您的情况下,这显然会导致在创建新工作表之前删除唯一工作表的行为。

为了避免这种情况,您可以通过实现对SpreadsheetApp.flush()的调用来强制执行同步。

这将确保在插入新工作表之前不会删除旧工作表。

样本:

copy.deleteSheet(copy.getSheets()[0]);// remove original "Sheet1"
SpreadsheetApp.flush();
copy.getSheets()[0].setName(name);

您可能还想在代码同步运行很重要的其他位置引入对flush()的调用。

 类似资料:
  • 所以在问这个之前,我搜索并发现了一些与我在这里想要做的相似的事情。 基本上我有工作簿AlphaMaster。这个工作簿是一个模板,我想用它来创建每周的新工作簿。 在本工作簿中,有名为“周一至周六”的工作表,以及带有相应日期的周一、周二等其他工作表。 我创建了一个在打开工作簿时加载的表单。我想要的是当我单击表单运行时,它将: > 将代码保存模板作为新工作簿运行 根据userform1的输入重命名工作

  • 我使用这段代码将工作簿中的每一张工作表复制到一个新的工作簿中,它工作得很好,但它颠倒了工作表的顺序,是否有任何办法阻止它这样做? 我正在复制所有的工作表,这样我就可以将它保存为不同的文件扩展名,这是我发现唯一有效的方法。

  • 我试图将活动工作表和2个指定工作表复制到一个新工作簿,然后让宏继续在新工作簿上运行,以便在保存它之前更改一些内容 null

  • 问题内容: 我在selenium离子中停留了一点 场景是这样的 现在,从那时起,我们必须将重点转移到该新标签上,因为其余的测试将在该新标签上进行。 我写的代码如下 此代码无法正常工作,直到从下拉菜单中单击子菜单为止,并且日志中显示错误 因此,当我尝试运行该测试用例时,它会显示错误 [警告]链接具有目标’_blank’,Selenium不支持该目标! 随机目标为:selenium_blank8441

  • 本文向大家介绍jQuery UI制作选项卡(tabs),包括了jQuery UI制作选项卡(tabs)的使用技巧和注意事项,需要的朋友参考一下 先看一下效果: Jquery-UI 选项卡的制作实际上是利用锚点链接的原理,实现起来非常的简单。 第一步:引入 jquery 和 jquery-ui 文件。 以下是我的head部分的代码: 第二步:写面板布局。 其中 id="tab"的div用来包裹我们的

  • 当我像下面的例子一样点击选项卡2时,我如何将选项卡1 Neumorphic css翻译成选项卡2呢,就像从选项卡1滑到选项卡2一样? https://dribble.com/shots/10805627-neumorphic-tab