首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Google脚本-引用一行中的特定单元格

Google脚本-引用一行中的特定单元格
EN

Stack Overflow用户
提问于 2020-01-30 15:04:00
回答 2查看 54关注 0票数 0

我有一个工作表,当我将一个特定的单元格更改为“是”时,我需要一个模板表被复制到一个新的版本中,并根据当前行上的单元格的值命名。

我在计算如何获得所选行中的第一个单元格的值时遇到了困难。这就是我目前所拥有的(我知道这是错误的):

代码语言:javascript
复制
function onEdit() { 


  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];
  var currentCell = sheet.getCurrentCell();  

  if (currentCell = "YES") 
  {
    SpreadsheetApp.getActiveSpreadsheet().toast("New change control sheet added to workbook.","Change Control",15);

  var sourceRow = ss.getActiveRange().getRowIndex();
  var tabName = ss.getRange(cell,1).getValues();

    ss.getSheetByName("CCTemplate").showSheet()
    .activate();
    ss.setActiveSheet(ss.getSheetByName('CCTemplate'), true);
    ss.duplicateActiveSheet();
    ss.setActiveSheet(ss.getSheetByName('CCTemplate'), true);
    ss.getActiveSheet().hideSheet();
    ss.setActiveSheet(ss.getSheetByName('Copy of CCTemplate'), true);
    ss.getActiveSheet().setName("CC" & tabName);
  }
}

有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-30 16:13:34

代码语言:javascript
复制
function onEdit(e) { 
  var sh=e.range.getSheet();
  if(sh.getName()=='Your Sheet Name' && e.value=="YES") {
    e.source.toast="New change control sheet added to workbook.","Change Control",15);
    var tabName=sh.getRange(e.range.rowStart,1).getValue();
    var tsh=e.source.getSheetByName('CCTemplate');
    var csh=tsh.copyTo(e.source);
    csh.setName('CC'+tabName);
  }
}

您应该避免在脚本中使用activate,特别是在必须在30秒内完成的简单触发器中。我认为这个代码做的和你想要的代码是一样的。一个重要的区别是,我使用触发器附带的事件对象中的信息。您应该添加代码Logger.log(JSON.stringify(e)),然后查看日志,您将看到有很多可用的信息,这就不需要运行额外的函数来获取电子表格之类的东西了。

票数 0
EN

Stack Overflow用户

发布于 2020-01-30 16:02:06

使用事件对象

除其他外,onEdit提供了事件对象rangevalue,它们有助于检索已编辑的范围及其值。

也是

  • 当您想要将一个单元格与一个值进行比较时,就像在if (currentCell = "YES")中一样--您需要检索它的值( currentCell.getValue()或仅仅是event.value),并且需要使用==而不是=进行比较。
  • 小心getValues()getValue()的对决。前者为您提供一个2D数组,如果要检索单个单元格的值,则不需要该数组。
  • 为了更改工作表的名称,无需将工作表设置为active。

您可以按照以下方式重写代码:

代码语言:javascript
复制
function onEdit(event) { 
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];
  var currentCell = event.range;  
  var value = event.value;
  if (value == "YES") 
  {
    ...
    var sourceRow = range.getRowIndex();
    var tabName = ss.getRange(sourceRow, 1).getValue();
    ...
    ss.getSheetByName('Copy of CCTemplate').setName("CC" + tabName);
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59988881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档