首页 文章

用于复制/重命名工作表和复制/修改公式/插入行的脚本

提问于
浏览
0

我希望在使用此电子表格时,这是一个帮助开发脚本以使事情变得更容易的地方 . 该脚本基本上会在当前工作表中添加一些内容 . 这是我现在手动执行的方式 .

所以我有一个新的游戏玩家要添加....

在工作表'摘要'中创建一个新行 . 复制现有行(无关紧要)然后将该行中的公式粘贴到新行中 . 在新行的第二个单元格中键入新的游戏玩家标记 . 复制'模板'表' . 从新行的第二个单元格将新工作表重命名为新游戏者标记 . 现在我必须回到我在'summary'中创建的新行,将每个公式中的工作表名称更改为新的游戏玩家标签表并将单元格引用数更改为51,因为当我从另一行(单元格)复制公式时它将ref单元格增加了1.例如:

= AudioEquation61!来自工作表摘要单元格D4的D51,复制到工作表摘要单元格D5 = AudioEquations61!D52 . 现在我将AudioEquations更改为新的游戏玩家标签(因此它引用新表格)并且必须将单元格参考D52更改为D51 .

一些优点是重新按字母顺序排列游戏玩家标签,有一个下拉菜单,上面写着“添加”......但是一旦我得到了主要的脚本,我就可以解决这个问题 .

这是一项繁琐的工作,特别是当有20多个配方时 . 我已经找到了一些东西,比如制作一个复制工作表的脚本,但我担心我还没有把这些东西放在一个脚本中的技能 . 任何帮助将不胜感激 .

谢谢 .

编辑:

这是我正在做的工作的副本.....

https://docs.google.com/spreadsheets/d/11T1L67M9fr5wUMozN6fegY6gJhhsnSgNvX80CwniSYY/edit?usp=sharing

活动清单 -

  • 向用户询问新的Gamer标签 - 不知道如何编码 .

  • 在工作表"Master Summary"的最后一行上方插入新行

  • 将新游戏者标记插入新行的单元格B中 .

  • 将最后一行的公式复制到新行(公式单元格ref是绝对的)

  • 制作表"Blank"的副本

  • 将"copy of Blank"重命名为新的游戏玩家标签(可能从新行的单元格B中拉出来?)

  • 使用新的游戏者标记将工作表"Master Summary"新行中的所有公式更改为参考表 . 无法弄清楚这一点 . 示例=空白!D $ 51更改为(新的游戏玩家标记或新行的单元格B中的值)!D $ 51 .

所有这些都是“手工”简单,但我试图让其他用户非常简单 . 我还在学习一些编码,比如插入一行并制作一张表的副本,但我无法找出或找到关于如何将表重命名为单元格值或更改公式参考的任何示例 .

1 回答

  • 0

    这是一个如何从用户那里获取Gamer标签的简单示例 .

    function getGamerTag()
    {
      var ss=SpreadsheetApp.getActiveSpreadsheet();
      var ui=SpreadsheetApp.getUi();
      var resp=ui.prompt('Gamer Tag', 'Please enter your Gamer Tag', ui.ButtonSet.OK);
      var gamerTag=resp.getResponseText();
      return gamerTag;
    }
    

    在lastRow之前插入一个新行:

    function insertRowBeforeLastRow()
    {
      var ss=SpreadsheetApp.getActiveSpreadsheet();
      var sht=ss.getSheetByName('Master Summary');
      var lastRow=sht.getLastRow();
      sht.insertRowBefore(lastRow);
    }
    

    在最后一行的单元格B中插入新的游戏者标记 . 这可能需要一些调试 .

    function insertNewGamerTag()
    {
      var ss=SpreadsheetApp.getActiveSpreadsheet(); 
      var sht=ss.getSheetByName('Master Summary');
      var lastRow=sht.getLastRow();
      var gamerTag=getGamerTag();
      if(gamerTag)
      {
        var rng=sht.getRange(lastRow-1, 2);
        if(String(rng.getValue()).length==0)
        {
           sht.getRange(lastRow-1, 2).setValue(gamerTag);
        }
        else
        {
          SpreadsheetApp.getUi().alert('Cell B of next to last row already has a value.');
        }
      }
      else
      {
        SpreadsheetApp.getUi().alert('No Gamer Tag Provided in insertNewGamerTag()');
      }
    }
    

    我现在要停下来让你有机会实施其中的一些 . 好的,这是你的功能:

    function copyBlankSheet() 
    { 
      var ss = SpreadsheetApp.getActiveSpreadsheet(); 
      var sht = ss.getSheetByName('Blank'); 
      var dest = ss; 
      sht.copyTo(dest); // now rename the sheet 
      var oldname = ss.getSheetByName('Copy of Blank'); 
      oldname.setName('New name'); 
     }
    

    这个被修改为这个:

    function copyBlankSheet() 
    { 
      var ss = SpreadsheetApp.getActiveSpreadsheet(); 
      var sht = ss.getSheetByName('Blank'); 
      var dest = ss; 
      sht.copyTo(dest); // now rename the sheet 
      var oldname = ss.getSheetByName('Copy of Blank'); 
      var newName=ss.getSheetByName('Master Summary').getRange(lastRow-1,2).getValue();
      oldname.setName(newName); 
     }
    

相关问题