使用 getNotes 设置值

时间:2020-12-31 20:33:34

标签: google-apps-script google-sheets

function onChange(e) {
  var ss = SpreadsheetApp.getActiveSheet();
  var s = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Current");
  var r = ss.getActiveCell();
      
  if(e.changeType == 'FORMAT' && ss.getName() == "Current" && r.getBackground() ==  "#b7b7b7") {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Completed");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).copyTo(target);
    
    targetsheet.getrange(targetSheet.getLastRow() + 1, 2).setValue(getNotes(getrange(targetSheet.getLastRow() + 1, 16)))
    
    s.deleteRow(row);
  }
};

function getNotes(cell)
{
   var ss = SpreadsheetApp.getActiveSpreadsheet();
   var range = ss.getRange(cell)
   return range.getNotes();   
}

我正在使用第三方插件 onChange 来满足我的需要。

当我使用 #b7b7b7 为行着色并从原始工作表中删除它时,此功能将一行从一张工作表复制到另一张工作表。然而,

targetsheet.getrange(targetSheet.getLastRow() + 1, 2).setValue(getNotes(getrange(targetSheet.getLastRow() + 1, 16)))

似乎不起作用。它应该从行中的第二个单元格中记下笔记,并将其复制到复制的工作表中同一行的第 16 个单元格。将不胜感激。

1 个答案:

答案 0 :(得分:1)

我在下面修改了您的一些代码。

function onChange(e) {
  var ss = SpreadsheetApp.getActiveSheet();
  var s = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Current");
  var r = ss.getActiveCell();
      
  if(e.changeType == 'FORMAT' && ss.getName() == "Current" && r.getBackground() ==  "#b7b7b7") {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Completed");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).copyTo(target);
    
    // Formatted note output to replicate sample data
    // You noted that it should be in column 16, feel free to update the column value `(4)` below
    targetSheet.getRange(targetSheet.getLastRow(), 4)
      .setValue(s.getRange(row, 2).getNote()) // get selected row's ID cell (row, 2) note
      .setBackground('#b7b7b7')               // gray
      .setHorizontalAlignment("center");      // center
    
    s.deleteRow(row);
  }
}

我想补充的是,您的情况使用起来并不安全。将单元格更改为灰色的任何地方都会触发条件块。如果我是你,我会添加一些条件来检查格式化的单元格是否在数据范围内(1 < getRow < getLastRow1 < getColumn < 3)。虽然,以目前的情况,它仍然可以工作。

另一件事是,我删除了第二个函数 getNotes 并将其与 setValue 集成,因为如果它只是获取格式化行的注释,则您实际上不需要将其分开。< /p>

输出:

sample output

格式化没有注释的新行:

sample output2