Reputation: 65
I have been reading a bunch of other posts and trying out a few things, but I haven't found a solution yet.
I have a Google Form that enters into a spreadsheet. When someone submits, I want to determine where the new row will get copied to based off of the data in column N (14). If it is A then copy the entire row to spreadsheet A and if it is B then copy the entire row to spreadsheet B.
The URLs are copies of the original in case anyone needs to play around with them. The form is here: 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);
}
}
Code is attached to the form through the google script editor. Code being used after the solution provided by 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);
}
}
Upvotes: 1
Views: 601
Reputation: 64042
I didn't test this code but I think it's close. It's fairly simple. Just tie it to onFormSubmit and it will get the last entry. I assumed that all spreadsheets were already created and that they have a 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);
}
}
I do think that if the onFormSubmits come in to fast this approach might not be able to keep up and might get the wrong data. I would consider adding another column call it Copied and the run through all of the rows and copy the ones that don't have a TimeStamp in Copied Column. And the loop version is the code below.
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"));
}
}
}
}
Upvotes: 2