Google表格-从下拉菜单中选择“完成”后,如何将提交的表格回复复制到表格中并将行移动到另一张表格中

时间:2018-08-04 17:54:57

标签: forms validation google-sheets copy move

我知道有人问过类似的事情,但是尽管我知道我已经很亲密,但还不能完全得到我所需要的东西。我对HTML / CSS有很好的理解,但是以前从未使用过VBS或Google Apps Script,我有点迷茫。

基本上,我有一个项目跟踪器,具体来说是视频制作。我已经设置了一个Google表单,以便生产者可以轻松地开始一个项目,我已经将其链接到了Google表格,效果很好。

现在,我想将任何新条目从“ FORM RESPONSES 1”复制到“ Active Projects”工作表,在检查工作表之前,它可以是1个条目或10个,因此它需要能够复制多行。我确实尝试过= IMPORTAGE和= ARRAYFORMULA,但这使人们无法进行编辑,例如说“到期日期”或“附加信息”。

所以我必须假设它是一个复制脚本,这是我尝试过的。

function onFormSubmit(e){
var responses = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Form Responses 1");
var projects = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Active Projects");
var lastrow = responses.getLastRow();
var col = responses.getLastColumn();
var row = responses.getRange(lastrow, 1, 1, col).getValues();

projects.appendRow(row[0]);
copyValuesOnly(copyFromRange, copyToRangeStart);
}

我还没有设法使它正常工作。

有一个复杂的问题,尽管信息将从“活动项目”工作表移动到另一个“已完成项目”工作表,所以我不希望它最终导致复制(重新)移动的行,这导致我继续我需要帮助的第二部分代码。

我希望有一个“状态”下拉菜单(通过“数据验证”显示“项目列表”,并说“活动,需要查看并完成”(如果太难了,请选择完成复选框) ),因此当选择“已完成”时,整行都将被移动(实质上已复制和删除)到“已完成的项目”表中。

function onEdit(e) {

var s = e.source.getActiveSheet();
if (s.getName() !== "Active Projects" || e.range.columnStart !== 1 || e.value !== "Completed") return;
e.source.getSheetByName("Completed Projects")
 .appendRow(s.getRange(e.range.rowStart, 1, 1, s.getLastColumn())
  .getValues()
  .reduce(function (a, b) {
    return a.concat(b)
   }))
  e.range.offset(0, 1)
s.deleteRow(e.range.rowStart);
}

这几乎可行,因为执行“ deleteRow”(例如第5行)时,下面的行(第6行)在其位置上移(到第5行),并且因为下拉菜单值(在第5行) 6)不要跟随上一行(到第5行),第5行的下拉菜单仍处于“已完成”状态,因此脚本只会循环播放,并且将移动其中包含数据的每一行!

任何明确的帮助将不胜感激,我确实从一个Excel文件开始,该文件主要完成了我想要的操作,但随后发现其中涉及的某些人没有Microsoft Office,因此我需要一个替代方法,因为Google表格非常实用多用户友好,这是一个不错的选择。

在此先感谢您阅读和提供帮助。

0 个答案:

没有答案