We built a system using multiple connected Google Sheets where some sheets work as input forms and others store all the data like a database.
Here’s our Apps Script code for the input forms:
// Clear form fields
function clearFields() {
var currentSheet = SpreadsheetApp.getActiveSpreadsheet();
var inputForm = currentSheet.getSheetByName("Employee Form");
var cellsToClear = ["D2", "D3", "D4", "D5", "D6", "D7", "D10"];
for (var j=0; j<cellsToClear.length; j++){
inputForm.getRange(cellsToClear[j]).clearContent();
}
}
// Save form data
function saveData(){
var currentSheet = SpreadsheetApp.getActiveSpreadsheet();
var inputForm = currentSheet.getSheetByName("Employee Form");
var targetSheet = SpreadsheetApp.openById('your-database-sheet-id-here')
var dataStorage = targetSheet.getSheetByName("Employee-Records");
var recordData = [[inputForm.getRange("D2").getValue(),
inputForm.getRange("D3").getValue(),
inputForm.getRange("D4").getValue(),
inputForm.getRange("D5").getValue(),
inputForm.getRange("D6").getValue(),
inputForm.getRange("D7").getValue()]];
dataStorage.getRange(dataStorage.getLastRow()+1,1,1,6).setValues(recordData);
clearFields();
}
// Search function
var SEARCH_COLUMN = 0;
function searchRecord() {
var currentSheet = SpreadsheetApp.getActiveSpreadsheet();
var inputForm = currentSheet.getSheetByName("Employee Form");
var searchValue = inputForm.getRange("D10").getValue();
var targetSheet = SpreadsheetApp.openById('your-database-sheet-id-here')
var allRecords = targetSheet.getSheetByName("Employee-Records").getDataRange().getValues();
for (var k = 0; k < allRecords.length; k++) {
var currentRow = allRecords[k];
if (currentRow[SEARCH_COLUMN] == searchValue) {
inputForm.getRange("D2").setValue(currentRow[0]);
inputForm.getRange("D3").setValue(currentRow[1]);
inputForm.getRange("D4").setValue(currentRow[2]);
inputForm.getRange("D5").setValue(currentRow[3]);
inputForm.getRange("D6").setValue(currentRow[4]);
inputForm.getRange("D7").setValue(currentRow[5]);
}
}
}
The problem: When we try to restrict access to the database sheets but allow people to use the input forms, we get this error message:
“You do not have permission to access the requested document”
How can we let users work with the input forms while keeping the database sheets private from them?