gpt4 book ai didi

javascript - 将单个单元格的值添加到通过谷歌脚本写入的数组的第一行

转载 作者:行者123 更新时间:2023-12-01 00:08:39 24 4
gpt4 key购买 nike

目标:
使用 Google 脚本将数据从一张表写入另一张“数据库”表。

当前状态:
当填写“表单”选项卡并单击绿色按钮时,将触发一个脚本,将数据从“表单”写入“更改订单数据库”选项卡或“行项目数据库”选项卡。将数据写入“变更单数据库”选项卡可以按预期工作,没有任何问题。将数据写入“行项目数据库”选项卡失败。

遇到的问题:
当脚本运行时,“Form”选项卡上的第 10-50 行应写入“Line Item DB”选项卡。我想将在表单选项卡 B7 上找到的 ID# 添加到正在写入的数组的每个行项目中。我已附上显示所需结果的屏幕截图。该脚本应将数据写入“行项目数据库”选项卡,如屏幕截图所示。 A 列是更改顺序#(来自“表单”选项卡上的单元格 B7,然后每行是第 10-50 行的数组。 enter image description here

当前脚本:

function SubmitChangeOrder() {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var form = sheet.getSheetByName('Form');
var codb = sheet.getSheetByName('Change Order DB');
var lidb = sheet.getSheetByName('Line Item DB');

var lirows = form.getLastRow();
var lineitems = form.getRange(10,1,lirows,3);
var lidestination = lidb.getRange(lidb.getLastRow()+1,2,lirows,3);
var sourcedata = lineitems.getValues();

var date = form.getRange('E7').getValue();
var customer = form.getRange('B3').getValue();
var re = form.getRange('B5').getValue();
var coid = form.getRange('B7').getValue();
var total = form.getRange('G5').getValue();
var status = form.getRange('G3').getValue();
var codestination = codb.getRange(codb.getLastRow()+1,1,1,6);


codestination.setValues([ [coid, date, customer, re, total, status] ]);
lidestination.setValues(sourcedata);

}

脚本问题:
代码的最后一部分,lidestination.setValues(sourcedata);正确写入第 10-50 行的数据,我只想将 ID# 添加到正在写入的每一行。

我有一个带有几个选项卡的谷歌表格。 link to the example

最佳答案

您需要循环遍历 sourcedata 数组,并将 coid 添加到每个嵌套数组的开头。有多种方法可以执行此操作,但我选择使用 concat() 创建一个新数组。 (鉴于变量名称,我认为不应修改它,否则它就不是“源”。)

我对您的代码做了一些其他的小调整,您可以在评论中看到。最重要的是,原始代码是混合 getLastRow()以及 getRange() 所需的 numRows 参数.

function SubmitChangeOrder() {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var form = sheet.getSheetByName('Form');
var codb = sheet.getSheetByName('Change Order DB');
var lidb = sheet.getSheetByName('Line Item DB');

const li_start_row = 10; // Use a variable for clarity
var numRows = form.getLastRow() - li_start_row + 1; // Calculate the number of line item rows
var lineitems = form.getRange(li_start_row,1,numRows,3); // Select number of rows, not the row limit
var lidestination = lidb.getRange(lidb.getLastRow()+1,1,numRows,4); // 4 columns, because adding Change Order #
var sourcedata = lineitems.getValues();

var date = form.getRange('E7').getValue();
var customer = form.getRange('B3').getValue();
var re = form.getRange('B5').getValue();
var coid = form.getRange('B7').getValue();
var total = form.getRange('G5').getValue();
var status = form.getRange('G3').getValue();
var codestination = codb.getRange(codb.getLastRow()+1,1,1,6);

// Create a new table with sourcedata, but with the Change Order #
// added to the beginning of each row
var li_db_values = [];
for (var i = 0; i < sourcedata.length; i++) {
li_db_values.push([coid].concat(sourcedata[i]));
}

codestination.setValues([ [coid, date, customer, re, total, status] ]);
lidestination.setValues(li_db_values);
}

您还可以采取更多措施来清理代码并提高性能。如果您有时间,我强烈建议您查看最佳实践,特别是 batch operations section .

关于javascript - 将单个单元格的值添加到通过谷歌脚本写入的数组的第一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60200612/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com