gpt4 book ai didi

javascript - 将一行从一个 Google 表格电子表格复制到另一个表格提交

转载 作者:行者123 更新时间:2023-11-30 15:13:33 24 4
gpt4 key购买 nike

我已经阅读了很多其他帖子并尝试了一些东西,但我还没有找到解决方案。

我有一个进入电子表格的 Google 表单。当有人提交时,我想根据第 N 列 (14) 中的数据确定新行将复制到的位置。如果是 A,则将整行复制到电子表格 A,如果是 B,则将整行复制到电子表格 B。

这些 URL 是原始文件的副本,以备不时之需。表格在这里:Copy of New Signage Form

function movingRows() {

var spreadsheetUrlToWatch = 'https://docs.google.com/spreadsheets/d/1q7HyUL3bhd_gLEAfVJrH4strnkF9_UP6uhY4Qy5A6Vc/edit#gid=291411519';

var columnNumberToWatch = 14; // column A = 1, B = 2, etc.
var valueToWatchA = "Fusion";
var valueToWatchB = "LightSource";
var spreadsheetUrlToMoveTheRowToA = "https://docs.google.com/spreadsheets/d/1sWSSHOgdum0LtCggtM6Gz-ytmFJJjMXH9pZ0NYGMV7g/edit#gid=0";
var spreadsheetUrlToMoveTheRowToB = "https://docs.google.com/spreadsheets/d/1BM7x-5STx5DsEtzRiZEq8qxVXgjPjtIZoTxxWuAk46c/edit#gid=0";

var ss = SpreadsheetApp.openByUrl(spreadsheetUrlToWatch);
var sheet = ss.getSheets()[0];
var range = sheet.getActiveCell();
var sheetNameToWatch = ss.getSheets()[0].getSheetName();
console.log(sheetNameToWatch);

if (sheet.getName() == sheetNameToWatch && range.getColumn() == columnNumberToWatch && range.getValue() == valueToWatchA) {

var targetSheet = SpreadsheetApp.openByUrl(spreadsheetUrlToMoveTheRowToA).getSheets()[0];
var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
sheet.getRange(range.getRow(), 1, 1, sheet.getLastColumn()).copyTo(targetRange);
}
else if (sheet.getName() == sheetNameToWatch && range.getColumn() == columnNumberToWatch && range.getValue() == valueToWatchB) {
var targetSheet = SpreadsheetApp.openByUrl(spreadsheetUrlToMoveTheRowToB).getSheets()[0];
var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
sheet.getRange(range.getRow(), 1, 1, sheet.getLastColumn()).copyTo(targetRange);
}

代码通过 google 脚本编辑器附加到表单。 Cooper 提供的解决方案后使用的代码:

function copyToSpreadsheet()
{
var ss0=SpreadsheetApp.openById('1q7HyUL3bhd_gLEAfVJrH4strnkF9_UP6uhY4Qy5A6Vc');
var sht0=ss0.getSheetByName('Form Responses 1');
var rng0=sht0.getDataRange();
var rng0A=rng0.getValues();
//Fusion Spreadsheet
var ssA=SpreadsheetApp.openById('1sWSSHOgdum0LtCggtM6Gz-ytmFJJjMXH9pZ0NYGMV7g');
var shtA=ssA.getSheetByName('Sheet1');
//LightSource Spreadsheet
var ssB=SpreadsheetApp.openById('1BM7x-5STx5DsEtzRiZEq8qxVXgjPjtIZoTxxWuAk46c');
var shtB=ssB.getSheetByName('Sheet1');
var row= rng0A[rng0A.length-1];
if(row[13]== "Fusion")
{
shtA.appendRow(row);
}
if(row[13]== "LightSource")
{
shtB.appendRow(row);
}
}

最佳答案

我没有测试这段代码,但我认为它很接近。这很简单。只需将它与 onFormSubmit 绑定(bind),它将获得最后一个条目。我假设所有电子表格都已创建并且它们有一个 Sheet1。

function copyToSpreadsheet()
{
var ss0=SpreadsheetApp.openById('1q7HyUL3bhd_gLEAfVJrH4strnkF9_UP6uhY4Qy5A6Vc');
var sht0=ss0.getSheetByName('Sheet1');
var rng0=sht0.getDataRange();
var rng0A=rng0.getValues();
var ssA=SpreadsheetApp.openById('1sWSSHOgdum0LtCggtM6Gz-ytmFJJjMXH9pZ0NYGMV7g');
var shtA=ssA.getSheetByName('Sheet1');
var ssB=SpreadsheetApp.openById('1sWSSHOgdum0LtCggtM6Gz-ytmFJJjMXH9pZ0NYGMV7g');
var shtB=ssB.getSheetByName('Sheet1');
var row= rng0A[rng0A.length-1];
if(row[13]==1)
{
shtA.appendRow(row);
}
if(row[13]==2)
{
shtB.appendRow(row);
}
}

我确实认为,如果 onFormSubmits 进入快速,这种方法可能无法跟上并可能得到错误的数据。我会考虑添加另一个称为 Copied 的列,然后遍历所有行并复制 Copied Column 中没有 TimeStamp 的行。循环版本是下面的代码。

function copyToSpreadsheetWithLoop()
{
var CopiedColumn=20;//Don't really know
var ss0=SpreadsheetApp.openById('1q7HyUL3bhd_gLEAfVJrH4strnkF9_UP6uhY4Qy5A6Vc');
var sht0=ss0.getSheetByName('Sheet1');
var rng0=sht0.getDataRange();
var rng0A=rng0.getValues();
var ssA=SpreadsheetApp.openById('1sWSSHOgdum0LtCggtM6Gz-ytmFJJjMXH9pZ0NYGMV7g');
var shtA=ssA.getSheetByName('Sheet1');
var ssB=SpreadsheetApp.openById('1sWSSHOgdum0LtCggtM6Gz-ytmFJJjMXH9pZ0NYGMV7g');
var shtB=ssB.getSheetByName('Sheet1');
for(var i=1;i<rng0A.length;i++)
{
var row= rng0A[i];
if(row[CopiedColumn-1])
{
if(row[13]==1)
{
shtA.appendRow(row);
sht0.getRange(i+1,CopiedColumn).setValue(Utilities.formatDate(new Date(), "GMT-6", "dd/MM/yyyy HH:mm:ss"));
}
if(row[13]==2)
{
shtB.appendRow(row);
sht0.getRange(i+1,CopiedColumn).setValue(Utilities.formatDate(new Date(), "GMT-6", "dd/MM/yyyy HH:mm:ss"));
}
}
}
}

关于javascript - 将一行从一个 Google 表格电子表格复制到另一个表格提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44788470/

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