Google脚本的上一行,脚本仅适用于1列。如果您编辑列,则它会更改2列

时间:2018-11-07 14:21:39

标签: google-apps-script

当您自己编辑每个单元格时,如果更改第一和第二秒列,该脚本将起作用。但是当您过去其中一行时。只会更改第一列

function onEdit(e) {

  var range = e.range;
  var column = range.getColumn();
  var value = range.getValue();
  var sheet = range.getSheet();
  var sheetName = sheet.getName();



  //Logger.log(value);
  //Logger.log(Date(value).getMonth());

 Logger.log(range.getColumn());

  switch (sheetName)  {
        case "sheetnameeee":
                  if(column == 1||column == 2)
                  {

                    range.getCell(1, 1).setValue(dateChange(value)).setNumberFormat("yyyy-MM-dd");

                    range.getCell(1, 2).setValue(dateChange(value)).setNumberFormat("yyyy-MM-dd");
                  };
            break;

    }

输入:

Start date   |  Eind date
okt 15, 2018 |  okt 21, 2018

复制和过去:

Start date   |  Eind date
2018-10-15   |  okt 21, 2018

但是它需要做:

Start date   |  Eind date
2018-10-15   |  2018-10-21

这是我的解决方案。这不是很好,但是可以。.

  switch (sheetName)  {
      case "Sheetnameeeee":

      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var test222 = ss.getSheetName();
      var startRow = 1
      var rowRange = ss.getRange("A:B");
      var rowLength = getRange.getLastRow();
      var RangeValues = getRange.getValues();

      for (var i=startRow; i < rowLength; i++) {

                if(typeof RangeValues[i][0] === 'string')
                { 
                  RangeValues[i][0] = dateChange(RangeValues[i][0]);
                };
                if(typeof RangeValues[i][1] === 'string')
                {
                  RangeValues[i][1] = dateChange(RangeValues[i][1]);
                };        

      }
      rowRange.setValues(RangeValues);
      rowRange.setNumberFormats([["yyyy-MM-dd","yyyy-MM-dd"]]);

1 个答案:

答案 0 :(得分:1)

我不确定您的逻辑。似乎getCell(1,1)和getCell(1,2)最终将具有相同的值。但是,假设dateChange返回一个Date,这可能会对您进行一些次要的名称修改。

config vars