如何更正我的代码,将一行从表格中的一个选项卡移动到另一个选项卡,然后从源表格中将其删除?

问题描述 投票:0回答:1

我正在尝试编写脚本的两部分:

  1. 首先,当“表单响应”选项卡上收到表单响应时,我需要它自动将该行/数据移动到“打开请求”选项卡中的下一行,然后从源选项卡中删除该行(“表格回复”。
  2. 其次,当某个项目的“状态”(“打开请求”选项卡上的 J 列)更改为“已完成”时,我需要它自动移动到“已完成的请求”选项卡并从“打开请求”中删除该行请求”选项卡。
    我已经为此工作了 3 天......我会让其中的一部分工作,但其他的就不工作了。 这里是苦苦挣扎的初学者。

非常感谢任何帮助!

这是我迄今为止第一个代码:(将表单响应移至开放请求)

function onEdit(e){
  let range = e.range
  let col = range.getColumn();
  let row = range.getRow();`
  let val = range.getValue();
  let source = e.source.getActiveSheet();

  if (col == 10 && val !== 'New'){
    let ss = SpreadsheetApp.getActiveSpreadsheet();
    let sheet = ss.getSheetByName(source.getName());
    let targetSheet = ss.getSheetByName('Open Requests');
    let targetRow = targetSheet.getLastRow() + 1;
    let data = sheet.getRange(row,1,1,sheet.getLastColumn()).getValues();
    targetSheet.appendRow(data[0]);
    sheet.deleteRow(row);

} }

但是,当我运行它时,我不断收到此错误,并且它没有将数据移动到“打开请求”选项卡。

[类型错误:无法读取未定义的属性(读取“范围”) onEdit @ 将表单响应移动到 Open Requests.gs:6]

我曾让第二部分工作过,但不小心写了它,所以不得不重新开始,现在我也根本无法让它工作。

google-apps-script copy-paste delete-row status
1个回答
0
投票

目标是将响应从

"Form Responses"
工作表移至
"Open Requests"
工作表,并在
the "Open Request"
设置为
to the "Completed Requests"
后将行从
Column J
工作表移至
"Completed"
工作表。

move the responses from the "Form Responses" sheet to the "Open Requests" sheet
,这是一个示例脚本,应该可以实现您想要的效果:

function onFormSubmit(e) {
  var rs = e.source.getSheetByName("Form Responses 1");
  var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Open Requests");
  sh.appendRow(e.values);
  rs.deleteRow(rs.getLastRow());
}

onEdit(e)类似,您不需要手动运行代码即可使脚本工作。相反,请使用 手动管理触发器 创建

onFormSubmit trigger
来运行该函数。单击 Google Apps 脚本编辑器左侧的 触发器 > + 添加触发器 以创建一个触发器。

至于

我曾经让第二部分工作过,但不小心写了它,所以不得不重新开始,现在我也根本无法让它工作。

它不起作用的原因是因为行被移动到

Open Requests
而不是
Completed Requests

改变:

let targetSheet = ss.getSheetByName('Open Requests');

致:

let targetSheet = ss.getSheetByName('Completed Requests');

完整代码将变为:

function onFormSubmit(e) {
  var rs = e.source.getSheetByName("Form Responses 1");
  var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Open Requests");
  sh.appendRow(e.values);
  rs.deleteRow(rs.getLastRow());
}

function onEdit(e) {
  let range = e.range
  let col = range.getColumn();
  let row = range.getRow();
  let val = range.getValue();
  let source = e.source.getActiveSheet();

  if (col == 10 && val !== 'New') {
    let ss = SpreadsheetApp.getActiveSpreadsheet();
    let sheet = ss.getSheetByName(source.getName());
    let targetSheet = ss.getSheetByName('Completed Requests');
    let data = sheet.getRange(row, 1, 1, sheet.getLastColumn()).getValues();
    targetSheet.appendRow(data[0]);
    sheet.deleteRow(row);
  }
}

注意:我从脚本中删除了

let targetRow = targetSheet.getLastRow() + 1;
,因为它没有被使用。另请确保您已为 onFormSubmit(e) 功能设置
可安装触发器
,以便将响应移至
Open Requests
工作表。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.