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 个单元格。将不胜感激。
答案 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 < getLastRow
和 1 < getColumn < 3
)。虽然,以目前的情况,它仍然可以工作。
另一件事是,我删除了第二个函数 getNotes
并将其与 setValue
集成,因为如果它只是获取格式化行的注释,则您实际上不需要将其分开。< /p>
输出:
格式化没有注释的新行: