如何使用Google脚本控制Google工作表中的输出单元格位置?

时间:2018-12-31 04:43:50

标签: google-apps-script google-sheets output controlling

我正在为Google工作表编写脚本,并从头开始学习脚本。

我使用了以下脚本,并成功更改了输入列,但输出仍保留在列A中。我希望输出转到列T,并且行应保持不变。

触发器类型不错,但是它可以在所有工作表中使用,因此我需要限制其工作表。如何使脚本在一种特定的工作表和标签组合中工作?

只要我询问将输出更改为一列,您能否解释确定输出列和行的一般方法?

谢谢。

代码,这是我正在使用的确切脚本。一旦在编辑器中运行脚本,它就会在第3行给我一个错误,即“ var eventRange = event.range;”。

如果在第6行中删除工作表名称“要发送的票”周围的定额符号,则会停止,但是在第6行运行脚本时出现新错误,该脚本在条件第6行显示“缺少”。 。 这是我正在使用的代码,由另一位张贴者在此处编写。

function onEdit(event) {

  var eventRange = event.range;
  var sheetName = eventRange.getSheet().getName();

  if (eventRange.getColumn() == 14 && sheetName == 'tickets to deliver') {

//if (eventRange.getColumn() == 14 && sheetName.match(/sheetName1|sheetName2/)) {

    // getRange(row, column, numRows, numColumns)
    var columnXRange = SpreadsheetApp.getActiveSheet().getRange(eventRange.getRow(), 21, eventRange.getNumRows(), 1);
    //second parameter changed from '1' to '21'. 21 represents column 'U'

    var values = columnXRange.getValues();

    for (var i = 0; i < values.length; i++) {
      if (!values[i][0]) {
        values[i][0] = new Date();
      }
    }
    columnXRange.setValues(values);
  }
}

2 个答案:

答案 0 :(得分:1)

  

我希望输出转到T列,并且该行应保持不变。

, 1,更改为, 20,

答案 1 :(得分:0)

您可以通过检查工作表名称来管理脚本影响的工作表。下面有两个选项。

  1. 首先是将工作表名称与字符串完全匹配。
  2. 第二个(注释掉)是将工作表的名称与 正则表达式。

从A到T的列调整在下面进行了评论。

function onEdit(event) {

  var eventRange = event.range;
  var sheetName = eventRange.getSheet().getName();

  if (eventRange.getColumn() == 14 && sheetName == 'yourSheetNameHere') {

//if (eventRange.getColumn() == 14 && sheetName.match(/sheetName1|sheetName2/)) {

    // getRange(row, column, numRows, numColumns)
    var columnXRange = SpreadsheetApp.getActiveSheet().getRange(eventRange.getRow(), 20, eventRange.getNumRows(), 1);
    //second parameter changed from '1' to '20'. 20 represents column 'T'

    var values = columnXRange.getValues();

    for (var i = 0; i < values.length; i++) {
      if (!values[i][0]) {
        values[i][0] = new Date();
      }
    }
    columnXRange.setValues(values);
  }
}

编辑

谈话后,我跳上计算机测试脚本。

这是我的工作脚本。 (只是删除了注释)实际的脚本应该没有任何变化。

此外,请注意,在测试需要事件对象的onEdit或onChange函数时,您不能仅按原样使用debug函数。 如果要使用调试功能,则需要在此功能中将第3行更改为var eventRange = SpreadsheetApp.getActive.getActiveRange();

还请注意,工作表名称测试字符串必须准确且区分大小写。

Snip of sheet names

function onEdit(event) {

  var eventRange = event.range;
  var sheetName = eventRange.getSheet().getName();

  if (eventRange.getColumn() == 14 && sheetName == 'tickets to deliver') {

    var columnXRange = SpreadsheetApp.getActiveSheet().getRange(eventRange.getRow(), 21, eventRange.getNumRows(), 1);

    var values = columnXRange.getValues();

    for (var i = 0; i < values.length; i++) {
      if (!values[i][0]) {
        values[i][0] = new Date();
      }
    }
    columnXRange.setValues(values);
  }
}