复制包含特定值的行并将其粘贴到另一个 sheet
copy rows that contains certain value and paste it to another sheet
我正在尝试创建一个 sheet,它有一个主数据库sheet 和 8 个不同的位置。
所以每次我向数据库提交表单时,我都希望我的代码读取提交表单的 HUB 位置。并将提交表格的详细信息复制到相关 sheet。这就是我目前所拥有的。
基本上如果我描述流程会更容易:
- 用户输入相关详细信息
- 表单提交到数据库sheet
- 代码然后查看它用于哪个集线器,然后将详细信息复制到相关 sheet 但在数据库 mastersheet.
中保留一份副本
我希望这是有道理的?
据我所知,您希望将答案提交给主 sheet 然后一旦提交了答案,您就可以将其发送到相关 sheet
为此,我将创建一个表单提交,将答案放在 sheet
const SOURCE_FORM_ID = link; // Change according to your needs
{
const form = FormApp.openById(SOURCE_FORM_ID);
ScriptApp.newTrigger("onFormSubmitTrigger")
.forForm(form)
.onFormSubmit()
.create();
}
function onFormSubmitTrigger(e) {
const targetSpreadsheet = SpreadsheetApp.openById("insert sheet id");
const targetSheet = targetSpreadsheet.getSheetByName("C");
if (targetSheet.getLastRow() === 0) { // Add headers if they don't exist yet
const itemTitles = e.source.getItems().map(item => item.getTitle()); // Get item titles
itemTitles.unshift("Timestamp"); // Append "Timestamp" to the sheet (if desired)
targetSheet.appendRow(itemTitles); // Append form item titles to the sheet
}
const itemResponses = e.response.getItemResponses();
const responses = itemResponses.map(itemResponse => itemResponse.getResponse()); // Get user responses
responses.unshift(new Date()); // Add today's date to the responses (if desired)
targetSheet.appendRow(responses.map(e => Array.isArray(e) ? e.join(",") : e)); // Append responses to the sheet
}
上面的代码将创建一个链接到您的表单的触发器,该表单将提交对特定 sheet
的答案
之后编辑或手动触发的代码将其移动到相关 sheet
var ss = SpreadsheetApp.getActiveSpreadsheet();
var seet = ss.getSheetByName('TC'); //source sheet
var testrange = seet.getRange('J:J'); //range to check
var testvalue = (testrange.getValues());
var csh = ss.getSheetByName('C'); //destination sheet
var data = [];
var j =[];
//Condition check in H:H; If true copy the same row to data array
for (i=0; i<testvalue.length;i++) {
if ( testvalue[i] == 'SENT') {
data.push.apply(data,seet.getRange(i+1,1,1,25).getValues());
//Copy matched ROW numbers to j
j.push(i);
}
}
//Copy data array to destination sheet
csh.getRange(csh.getLastRow()+1,1,data.length,data[0].length).setValues(data);
//Delete matched rows in the source sheet
for (i=0;i<j.length;i++){
var k = j[i]+1;
sheet.deleteRow(k);
//Alter j to account for deleted rows
if (!(i == j.length-1)) {
j[i+1] = j[i+1]-i-1;
}
上面的代码是我用来将一行移动到另一行的代码 sheet 稍微修改一下你就可以将它移动到目的地 sheet 而将它留在 master sheet如果设置了表单提交将表单数据发送给master
我正在尝试创建一个 sheet,它有一个主数据库sheet 和 8 个不同的位置。
所以每次我向数据库提交表单时,我都希望我的代码读取提交表单的 HUB 位置。并将提交表格的详细信息复制到相关 sheet。这就是我目前所拥有的。
基本上如果我描述流程会更容易:
- 用户输入相关详细信息
- 表单提交到数据库sheet
- 代码然后查看它用于哪个集线器,然后将详细信息复制到相关 sheet 但在数据库 mastersheet. 中保留一份副本
我希望这是有道理的?
据我所知,您希望将答案提交给主 sheet 然后一旦提交了答案,您就可以将其发送到相关 sheet
为此,我将创建一个表单提交,将答案放在 sheet
const SOURCE_FORM_ID = link; // Change according to your needs
{
const form = FormApp.openById(SOURCE_FORM_ID);
ScriptApp.newTrigger("onFormSubmitTrigger")
.forForm(form)
.onFormSubmit()
.create();
}
function onFormSubmitTrigger(e) {
const targetSpreadsheet = SpreadsheetApp.openById("insert sheet id");
const targetSheet = targetSpreadsheet.getSheetByName("C");
if (targetSheet.getLastRow() === 0) { // Add headers if they don't exist yet
const itemTitles = e.source.getItems().map(item => item.getTitle()); // Get item titles
itemTitles.unshift("Timestamp"); // Append "Timestamp" to the sheet (if desired)
targetSheet.appendRow(itemTitles); // Append form item titles to the sheet
}
const itemResponses = e.response.getItemResponses();
const responses = itemResponses.map(itemResponse => itemResponse.getResponse()); // Get user responses
responses.unshift(new Date()); // Add today's date to the responses (if desired)
targetSheet.appendRow(responses.map(e => Array.isArray(e) ? e.join(",") : e)); // Append responses to the sheet
}
上面的代码将创建一个链接到您的表单的触发器,该表单将提交对特定 sheet
的答案之后编辑或手动触发的代码将其移动到相关 sheet
var ss = SpreadsheetApp.getActiveSpreadsheet();
var seet = ss.getSheetByName('TC'); //source sheet
var testrange = seet.getRange('J:J'); //range to check
var testvalue = (testrange.getValues());
var csh = ss.getSheetByName('C'); //destination sheet
var data = [];
var j =[];
//Condition check in H:H; If true copy the same row to data array
for (i=0; i<testvalue.length;i++) {
if ( testvalue[i] == 'SENT') {
data.push.apply(data,seet.getRange(i+1,1,1,25).getValues());
//Copy matched ROW numbers to j
j.push(i);
}
}
//Copy data array to destination sheet
csh.getRange(csh.getLastRow()+1,1,data.length,data[0].length).setValues(data);
//Delete matched rows in the source sheet
for (i=0;i<j.length;i++){
var k = j[i]+1;
sheet.deleteRow(k);
//Alter j to account for deleted rows
if (!(i == j.length-1)) {
j[i+1] = j[i+1]-i-1;
}
上面的代码是我用来将一行移动到另一行的代码 sheet 稍微修改一下你就可以将它移动到目的地 sheet 而将它留在 master sheet如果设置了表单提交将表单数据发送给master