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

时间:2017-06-19 01:27:24

标签: google-apps-script google-sheets

我希望在使用此电子表格时,我可以帮助您开发脚本以简化操作。该脚本基本上会为当前工作表添加一些内容。这是我现在手动完成的方式。

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

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

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

一些优点是重新按字母顺序排列游戏玩家标签,有一个下拉菜单,上面写着"添加" ...但是一旦我得到主脚本,我就可以算出来。

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

谢谢。

编辑:

以下是我正在处理的内容的副本.....

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

活动清单 -

  1. 向用户询问新的Gamer标签 - 不确定如何编码。
  2. 在工作表"主要摘要"
  3. 的最后一行上方插入新行
  4. 将新游戏者标记插入新行的单元格B中。
  5. 将最后一行的公式复制到新行(公式单元格ref是绝对的)
  6. 制作工作表副本"空白"
  7. 重命名"空白副本"新游戏玩家标签(可能是从新行的单元格B拉出来的吗?)
  8. 更改工作表新行中的所有公式" Master Summary"使用新的Gamer标签参考表格。无法解决这个问题。示例=空白!D $ 51更改为(新的游戏玩家标记或新行的单元格B中的值)!D $ 51。
  9. 这一切都很简单"手工"但是我试图让其他用户变得非常简单。我还在学习一些编码,比如插入一行并制作一张表的副本,但我无法弄清楚或找到有关如何将表格重命名为单元格值的示例或改变公式参考。

1 个答案:

答案 0 :(得分:0)

这是一个如何从用户那里获取游戏玩家标签的简单示例。

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); 
 }