2017-06-19 95 views
0

我希望这是获得一些帮助的地方,可以帮助开发脚本,以便在处理此电子表格时使一些事情更轻松。该脚本基本上会将一些东西添加到当前表单中。这里是我如何手动现在做。复制/重命名表单并复制/修改公式/插入行的脚本

所以我有一个新的玩家加入....

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

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

几个加号将重新按字母顺序排列的游戏标签,有一个下拉菜单,上面写着“加” ......但我可以从图中加有一次我让主脚本制定。

一个单调乏味的工作,特别是当有20多个公式。我已经想出了一些东西,比如制作一个脚本来复制工作表,但是我担心我还没有将所有这些功能放在一起的技巧。任何帮助将不胜感激。

谢谢。

编辑:

这里是我工作的一个副本.....事件

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

列表 -

  1. 要求用户提供新玩家标签 - 不知道如何编码。
  2. 在表格“主摘要”中的最后一行上方插入新行
  3. 将新的Gamer标签插入到新行的单元格B中。
  4. 最后一行到新行的副本公式(公式单元格裁判是绝对的)板材的
  5. 化妆副本“空白”“的空白副本”
  6. 命名新玩家标签(可能来自新行小区B拉?)
  7. 将表格“Master Summary”的新行中的所有公式更改为具有新Gamer标签的工作表。无法弄清楚这一点。例如=空白!D $ 51改为(新的游戏者标签或新行的单元格B中的值)!D $ 51。

这一切都很简单“手工”,但我试图让其他用户非常简单。我仍然在学习,但是我得到了一些编码,例如插入一行并制作一张表的副本,但我无法弄清楚或找到任何有关如何将表格重命名为单元格值或更改公式ref 。

+0

这听起来像你希望有人写完整的脚本为你.. CYOU应该通过增加一个例子片启动回答您的问题并提供您已拥有的代码。然后人们可能会开始指引你朝着正确的方向前进。 –

回答

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

谢谢!他们工作很棒! –

+0

好吧,那么你现在就试试。尝试制作一份“空白”表格并根据需要重新命名。您可能需要阅读[documentation here](https://developers.google.com/apps-script/reference/spreadsheet/sheet)。大部分信息将出现在工作表,范围或电子表格页面中。 – Cooper

+0

问题:我错过了什么?试图在插入游戏者标记代码之前将插入新行并入插入游戏者标记代码,但它一直返回“最后一行旁边的单元格B已具有值”。 –