Skip to content

Instantly share code, notes, and snippets.

@franklinokech
Created September 15, 2020 13:42
Show Gist options
  • Save franklinokech/635368a79e3752fc794f1c6db64d4943 to your computer and use it in GitHub Desktop.
Save franklinokech/635368a79e3752fc794f1c6db64d4943 to your computer and use it in GitHub Desktop.
a script to move google sheet records
function onOpen() {
var ui = SpreadsheetApp.getUi();
// Or DocumentApp or FormApp.
ui.createMenu('Main Menu')
.addItem('Create Tallying Sheet', 'copy2')
.addItem('Archive Data', 'archive_data')
.addToUi();
}
//function to copy tallying to generator
function copy2() {
var folder=DriveApp.getFolderById("1D7D1l_13mwtbzmI5iffzaPsX1QooHDnd");
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Tallying")
var cellWithFileName = ss.getRange("B4");
var name = cellWithFileName.getValue();
var file=SpreadsheetApp.create(name);
var fileID = file.getId()
var copyFile=DriveApp.getFileById(fileID);
var destination = DriveApp.getFileById(fileID)
folder.addFile(copyFile); //copies file in folder we want: file is blank at this time
DriveApp.getRootFolder().removeFile(copyFile); //removes copied file from root
var newsheet = ss.getSheetByName("Tallying").copyTo(file);
var copyOnlyRange1 = ["A1:B7"];
//var copyOnlyRange3 = ["A9:D12"];
//var copyOnlyRange2 = ["C36:B359"];
var srcrng1 = ss.getRange(copyOnlyRange1);
var values1 = srcrng1.getDisplayValues();
//var srcrng2 = ss.getRange(copyOnlyRange2);
//var values2 = srcrng2.getDisplayValues();
//var srcrng3 = ss.getRange(copyOnlyRange3);
//var values3 = srcrng3.getDisplayValues();
newsheet.getRange(srcrng1.getA1Notation()).setValues(values1);
//newsheet.getRange(srcrng2.getA1Notation()).setValues(values2);
//newsheet.getRange(srcrng3.getA1Notation()).setValues(values3);
}
//Archive sorting data
function archive_data() {{ SpreadsheetApp.getUi() // the fist 18 lines and the last from else are just button for confirming
.createMenu('Custom Menu')
.addItem('Show alert', 'showAlert')
.addToUi();
}
//set the confirmation dialog
var ui = SpreadsheetApp.getUi(); // Same variations.
var result = ui.alert(
'Please confirm',
'Do You Really Want To Archive?',
ui.ButtonSet.YES_NO);
// Process the user's response.
if (result == ui.Button.YES) {
try {
//Insert your script logic here
//NOTE!!! IMPORTANT!!!
//For testing and debugging - Remove the slashes in front of the Logger.log() lines - run the
//code and then in the VIEW menu - VIEW the LOGS - Provide the LOG print out if there is an error
var arrayOfRowsToArchive,columnNumberOfValuesToTestFor,data,i,lastColumn,L,numberOfRowsToArchive,numRows,
range,rowsToDelete,ss,sheet,sheetName,sheetToMoveTheRowTo,startRow,status,targetSheet,thisRowsData,
valuesToTestFor;
//USER INPUT:
startRow =2 ; //The row number to start from where the data starts - exclude header rows
valuesToTestFor = "Yes";//Type one or more values to test for - If multiple values seperate by comma
columnNumberOfValuesToTestFor = 4;
sheetName = "data_entry_summary";//Name of sheet tab where the data will be removed from
sheetToMoveTheRowTo = "Archives";
//END OF USER INPUT
ss = SpreadsheetApp.getActiveSpreadsheet();
sheet = ss.getSheetByName(sheetName);//Get the sheet tab with the data to be searched
numRows = sheet.getLastRow();
lastColumn = sheet.getLastColumn();
arrayOfRowsToArchive = [];
//The getRange() method uses parameters of (start Row, start Column, Number of Rows to get, Number of Columns to get)
data = sheet.getRange(startRow, 1, numRows, lastColumn).getValues();//Get all values except the header rows
L = data.length;//Get the number of rows that are in the data
for (i=0; i<L; i++) {//Loop through all the rows of data
status = data[i][columnNumberOfValuesToTestFor];
Logger.log('status: ' + status);
if (valuesToTestFor.indexOf(status) !== -1 && status !="") {//Search for a match between the cell value and values to look for
thisRowsData = data[i];//Only get inner array of data
//Logger.log('thisRowsData: ' + thisRowsData)
arrayOfRowsToArchive.push(thisRowsData);//Push one row of data to outer array
}
}
if (arrayOfRowsToArchive) {
numberOfRowsToArchive = arrayOfRowsToArchive.length;
if (!numberOfRowsToArchive) {
Browser.msgBox('No records were found to Send To Tracker');
return;//No rows were found to archive
}
} else {//There is no good value for arrayOfRowsToArchive- There was an error
//Logger.log('There is a problem with arrayOfRowsToArchive');
}
targetSheet = ss.getSheetByName(sheetToMoveTheRowTo);
targetSheet.getRange(targetSheet.getLastRow()+1, 1, numberOfRowsToArchive, arrayOfRowsToArchive[0].length)
.setValues(arrayOfRowsToArchive);
//Logger.log('rowsToDelete: ' + rowsToDelete)
Browser.msgBox('Data Archived Successfully');
}
catch(e) {
//Catch any error here. Example below is just sending an email with the error.
MailApp.sendEmail('crispus.kibuthi@komaza.org',
'Farmer Payment Error - Error',
e);
//error message to user
Browser.msgBox('Ooops, Something Wrong Occured,We have Processing Manager');
}
}
}
//get date of entry
function onEdit(e) {
var ss = SpreadsheetApp.getActiveSheet();
var r = ss.getActiveCell();
//1.Change 'Sheet1' to be matching your sheet name
if (r.getColumn() < 9 && ss.getName()=='Data_entry') { // 2. If Edit is done in any column before Column (I) And sheet name is Sheet1 then:
var celladdress ='I'+ r.getRowIndex()
ss.getRange(celladdress).setValue(new Date()).setNumberFormat("MM/dd/yyyy");
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment