在活动工作表上运行onedit

时间:2017-05-05 19:26:36

标签: google-sheets spreadsheet

我已经找到了这个问题的答案,但即使是基本的脚本,我也非常环保,所以我无法理解我所发现的内容。

我有一张我们用于工作清单的电子表格 - 它分为三个标签:样本/图像/存档

用户访问电子表格以收集要工作的项目 - 一旦完成,他们将A列标记为"完成",并且我有ScampMichael非常有用的代码来自动将行移动到&#34 ;档案"一旦他们这样做了:

function onEdit(event) {
// assumes source data in sheet named Samples
// target sheet of move to named Archive
// test column with Completed is col 1 or A
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = event.source.getActiveSheet();
var r = event.source.getActiveRange();

if(s.getName() == "Samples" && r.getColumn() == 1 && r.getValue() == "Complete") {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("Archive");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).moveTo(target);
s.deleteRow(row);
 }
}

我的挑战是我无法让这些代码同时用于"样本"和#34;图像"标签。我认为这是因为每个电子表格不能有多个onEdit函数,但到目前为止,我扩展代码以查看两个选项卡的努力都失败了。

非常感谢任何可以提供的帮助!

1 个答案:

答案 0 :(得分:0)

目前还不完全清楚你想做什么,但我对它采取了一些措施。我假设图像与样本上的完成行位于同一行号上,当将图像复制到存档时,我将其附加到存档中创建的行的末尾。我对您的代码进行了一些更改。他们被注意到了。如果您需要,我可以分享我的测试电子表格。

function onEdit(event) {
// assumes source data in sheet named Samples
// target sheet of move to named Archive
// test column with Completed is col 1 or A
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = event.source.getActiveSheet();
var r = event.source.getActiveRange();
if(s.getName() == "Samples" && r.getColumn() == 1 && r.getValue() == 
"Complete") {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("Archive");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).moveTo(target);
s.deleteRow(row);//changed to delete the row
 image(row,numColumns)//call function to process Images send row and last column
}}
function image(row,numColumns){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s1=ss.getSheetByName("Images")//get Images sheet
  var lc=s1.getLastColumn()
  var data=s1.getRange(row, 1, 1,lc)//get row
  var targetSheet = ss.getSheetByName("Archive");
  var target = targetSheet.getRange(targetSheet.getLastRow() , numColumns+1,1,1);//add image one column after Samples data on same row.
  s1.getRange(row, 1, 1, lc).moveTo(target);
  s1.deleteRow(row)//delete the copied image row.
}