根据单元格信息将数据推送到特定工作表
Pushing data to specific sheets depending upon cell information
好的,我这里有一些代码我认为应该可以工作,但没有。我想要这样,如果任何 sheet 的第一列的状态为 "complete",它就会推送到 "Completed Tasks" sheet。但是由于某种原因它不起作用。我不确定这是否是语法问题。
function onEdit(event) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = event.source.getActiveSheet();
var r = event.source.getActiveRange();
if((s.getName() == "Beau" || "Derek" || "Jay" || "Steven" || "Terence" || "Victor") && r.getColumn() == 1 && r.getValue() == "Complete") {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("Completed Tasks");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).moveTo(target);
s.deleteRow(row);
}
}
这是我 sheet 的 link。正如您在 "Beau" sheet 上看到的那样,有一些信息,但还没有推送到任何地方。
https://docs.google.com/spreadsheets/d/1_HQJ2UK6R3QTLY9oeVe-PIaZngPN1luQAz633taE4Oo/edit?usp=sharing
我也希望这样,如果信息输入到前面 "To Do" sheet,它会检查 "Assigned To" 单元格并将其推送到正确的人的 sheet.之前我们把它简单多了,但是通过分离 sheets 它让我变得非常复杂(根据我的经验)
谢谢!
我从未见过语法 s.getName() == "Beau" || "Derek" || "Jay" || "Steven" || "Terence" || "Victor"
并且显然它不起作用,如果您记录上面的内容,它总是 return "Derek",第二个名字。为了克服这个问题,创建一个带有名称的 object/array 并检查名称是否存在。
例如
function onEdit(event) {
var ss = SpreadsheetApp.getActiveSpreadsheet(),
s = event.source.getActiveSheet(),
r = event.source.getActiveRange(),
allowed = {"Beau" : 1 , "Derek" : 1 , "Jay" : 1 , "Steven" : 1 , "Terence" : 1 , "Victor" : 1};
if( allowed[ s.getName() ] && r.getColumn() == 1 && r.getValue() == "Complete") {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("Completed Tasks");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).moveTo(target);
s.deleteRow(row);
}
}
s.getName() == "Beau" || "Derek" || "Jay" || "Steven" || "Terence" || "Victor"
行不通。您必须使用:
s.getName() == "Beau" || s.getName() == "Derek" || s.getName() == "Jay" || s.getName() == "Steven" || s.getName() == "Terence" || s.getName() == "Victor"
但是,没有理由一遍又一遍地继续使用 getName()
方法。创建一个变量:
var nameToCheck = s.getName();
Logger.log('the name is: ' + nameToCheck);
if (nameToCheck == "Beau" || nameToCheck === "Derek" || nameToCheck === "Jay" || nameToCheck === "Steven" || nameToCheck === "Terence" || nameToCheck === "Victor")
看看这是否有效(先禁用当前的 onEdit):
function onEdit(e) {
var ss = e.source,
s = ss.getActiveSheet(),
sheets = ["Beau", "Derek", "Jay", "Steven", "Terence", "Victor"];
if (sheets.indexOf(s.getName()) === -1 || e.range.columnStart !== 1 || e.value !== 'Complete') return;
ss.getSheetByName('Complete Tasks')
.appendRow(e.range.offset(0, 0, 1, 7)
.getValues()[0])
s.deleteRow(e.range.rowStart);
}
好的,我这里有一些代码我认为应该可以工作,但没有。我想要这样,如果任何 sheet 的第一列的状态为 "complete",它就会推送到 "Completed Tasks" sheet。但是由于某种原因它不起作用。我不确定这是否是语法问题。
function onEdit(event) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = event.source.getActiveSheet();
var r = event.source.getActiveRange();
if((s.getName() == "Beau" || "Derek" || "Jay" || "Steven" || "Terence" || "Victor") && r.getColumn() == 1 && r.getValue() == "Complete") {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("Completed Tasks");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).moveTo(target);
s.deleteRow(row);
}
}
这是我 sheet 的 link。正如您在 "Beau" sheet 上看到的那样,有一些信息,但还没有推送到任何地方。
https://docs.google.com/spreadsheets/d/1_HQJ2UK6R3QTLY9oeVe-PIaZngPN1luQAz633taE4Oo/edit?usp=sharing
我也希望这样,如果信息输入到前面 "To Do" sheet,它会检查 "Assigned To" 单元格并将其推送到正确的人的 sheet.之前我们把它简单多了,但是通过分离 sheets 它让我变得非常复杂(根据我的经验)
谢谢!
我从未见过语法 s.getName() == "Beau" || "Derek" || "Jay" || "Steven" || "Terence" || "Victor"
并且显然它不起作用,如果您记录上面的内容,它总是 return "Derek",第二个名字。为了克服这个问题,创建一个带有名称的 object/array 并检查名称是否存在。
例如
function onEdit(event) {
var ss = SpreadsheetApp.getActiveSpreadsheet(),
s = event.source.getActiveSheet(),
r = event.source.getActiveRange(),
allowed = {"Beau" : 1 , "Derek" : 1 , "Jay" : 1 , "Steven" : 1 , "Terence" : 1 , "Victor" : 1};
if( allowed[ s.getName() ] && r.getColumn() == 1 && r.getValue() == "Complete") {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("Completed Tasks");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).moveTo(target);
s.deleteRow(row);
}
}
s.getName() == "Beau" || "Derek" || "Jay" || "Steven" || "Terence" || "Victor"
行不通。您必须使用:
s.getName() == "Beau" || s.getName() == "Derek" || s.getName() == "Jay" || s.getName() == "Steven" || s.getName() == "Terence" || s.getName() == "Victor"
但是,没有理由一遍又一遍地继续使用 getName()
方法。创建一个变量:
var nameToCheck = s.getName();
Logger.log('the name is: ' + nameToCheck);
if (nameToCheck == "Beau" || nameToCheck === "Derek" || nameToCheck === "Jay" || nameToCheck === "Steven" || nameToCheck === "Terence" || nameToCheck === "Victor")
看看这是否有效(先禁用当前的 onEdit):
function onEdit(e) {
var ss = e.source,
s = ss.getActiveSheet(),
sheets = ["Beau", "Derek", "Jay", "Steven", "Terence", "Victor"];
if (sheets.indexOf(s.getName()) === -1 || e.range.columnStart !== 1 || e.value !== 'Complete') return;
ss.getSheetByName('Complete Tasks')
.appendRow(e.range.offset(0, 0, 1, 7)
.getValues()[0])
s.deleteRow(e.range.rowStart);
}