【发布时间】:2017-06-27 19:36:09
【问题描述】:
我一直在阅读大量其他帖子并尝试了一些事情,但我还没有找到解决方案。
我有一个可输入电子表格的 Google 表单。当有人提交时,我想根据 N (14) 列中的数据确定新行将被复制到哪里。如果是 A,则将整行复制到电子表格 A,如果是 B,则将整行复制到电子表格 B。
这些 URL 是原始 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);
}
}
【问题讨论】:
-
您可以使用电子表格函数 IMPORTRANGE 和 QUERY 根据 N 的值导入数据,例如
=QUERY( IMPORTRANGE("1q7HyUL3bhd_gLEAfVJrH4strnkF9_UP6uhY4Qy5A6Vc", responses!A2:AZ), "Select * where Col14 Contains 'A'", 0)请注意,我没有进入您的示例文件,并且 Col14 可能会更改为 N这个案例。您可以根据需要更改范围。唯一的问题是您无法操纵数据。再说一次,我不想操纵提交的内容,所以它对我有用。 -
@Karl_S - 我试过你的想法,就像
=QUERY( IMPORTRANGE("https://docs.google.com/spreadsheets/d/1q7HyUL3bhd_gLEAfVJrH4strnkF9_UP6uhY4Qy5A6Vc/edit#gid=291411519", Form Responses 1!A2:AZ), "Select * where N contains 'Fusion'", 0),但它一直给我一个公式解析错误。我对电子表格编码不是很熟悉,所以如果我做错了什么,请告诉我。谢谢! -
IMPORTRANGE 不使用整个 URLm,只使用 ID,并且由于工作表/选项卡名称有空格,因此需要用引号引起来。试试:
=QUERY( IMPORTRANGE("1q7HyUL3bhd_gLEAfVJrH4strnkF9_UP6uhY4Qy5A6Vc", "Form Responses 1"!A2:AZ), "Select * where N contains 'Fusion'", 0)另请注意,您必须授予工作表权限才能导入单元格将提示您输入的数据。
标签: javascript forms google-apps-script google-sheets