I am trying to build a form in Google Sheets. I have one row which is a drop down list (cell A10, data validation-list from range). The whole sheet is only columns A and B, as the others I have deleted. I need to give a way for anyone editing the file to add a copy of that cell underneath it, and keep the drop down list, so they can choose more than one option from that list if needed.
Best I can figure, this should be doable with check boxes and some scripting, but I am just now learning scripting, so I have no idea how the script should look.
I need a way to do this automatically (as in, inserting a new row with the same drop down list when they check a box, or anything else similar) as some of the people that will be filling out this form are really not technical at all, so just telling them to copy the row will not work.
Is there a way to do this?
Add Row underneath current row
function addNewRowUnderneathCurrentRow() {
const ss = SpreadsheetApp.getActive();
const sh = ss.getActiveSheet();
sh.insertRowAfter(sh.getActiveRange().getRow())
}
Related
I've created a google spreadsheet. It has a master sheet, and I made a query function to pull data for my team.
My team has to update the column that has a comment section. But pulled data cannot be changed.
Now I need either of solutions:
1. Change the original cell in the master sheet remotely
2. Have a dynamic hyperlink to the cell they need to update
Here what I would want for the option №2 in my google spreadsheet - excel example I found on the internet
Solution
I believe this is what you were looking for (if not please clarify a bit more your question): you want to create a dropdown list that depending on the name on it the link next to it will change accordingly to direct you to the specific cell of that person in the other sheet.
If that is the case here is the simplified piece of code that will achieve this with self explanatory comments:
function onEdit() {
// Get the two sheets
var ss1 = SpreadsheetApp.getActive().getSheetByName('Sheet1');
var ss2 = SpreadsheetApp.getActive().getSheetByName('Sheet2');
// Create an array for the dropdown list
var names = ['Ramon', 'Jose', 'Pepito'];
// Build the dropdown data validation
var dropdown = SpreadsheetApp.newDataValidation().requireValueInList(names).build();
// Set the dropdown to your desired ccell and attach the validation to that cell
var dropdownCell = ss1.getRange('A1');
dropdownCell.setDataValidation(dropdown);
// For every case of your dropdown (for every name) create an if condition so that the link on the side keeps changing
// accordingly to who is set on the drop down (i.e repeat this step for the rest of the names).
if(dropdownCell.getValue()=='Ramon'){
// Set the vale of B1 to the hyperlink formula (you need to get your linked sheet id and the range or cell you want to link it to.
ss1.getRange("B1").setValue('=hyperlink("#gid='+ss2.getSheetId()+'&range='+ss1.getRange('B112').getA1Notation()+'", "Click to jump to Sheet 2")');
}
}
For achieving this I took use of the formula hyperlink and of the Apps Script tool for creating data validation and setting it to a specific cell. Moreover, the use of onEdit() will allow you to catch instant changes in the dropdown cell.
I hope this has helped you. Let me know if you need anything else or if you did not understood something. :)
For Google sheet workbooks that have several sheets, I create a Table of Contents sheet that lists all of the sheets in the workbook to increase ease of use for users.
I have looked for an add-on, macro, or script that can speed up the process. No dice. Any ideas for how to automate the process of creating a new sheet that lists the names of all of the other sheets (One sheet name per cell) and then automatically links the cell to that sheet?
Just to expound, this is a great solution except it will not update when you add new tabs or rename/ reorder current tabs. The only solution I could find is to create a simple checkbox trigger.
First I added a checkbox on my Table of Contents tab page. Then I added the script above except, instead of SHEETLIST() in line one I added my checkbox's cell number - for example, SHEETLIST(B3).
Then, I put the formula; in which populates the two columns of data - Name & #GID. In another cell (with plenty of room to list all the tabs) I put the top =ARRAYFORMULA... (not the one with the VLOOKUP) but, again, instead of empty parenthesis after SHEETLIST() I input my checkbox's cell number in both places, like below:
=ARRAYFORMULA(HYPERLINK("#gid="&
QUERY(INDEX(SHEETLIST(B3);;2); "offset 1");
QUERY(INDEX(SHEETLIST(B3);;1); "offset 1")))
I then hid the columns with the NAME & #GID data so you can only see the hyperlinked Table of Contents.
Now, whenever I update my tabs I just click the checkbox and it forces everything to reload. Not completely automatic/ dynamic but the best solution I could find.
In this sheet, I have some boxes which calculate information, (Columns K:BO)
I have drawn a button next to each box (ADD LINE)
I need a script attached to the button that will transfer only the information in the coloured cells from each box across to a "Collection Box' in Column (DC:DK)
Each box calculates differently and sometimes I may not need information from all boxes at once hence a button for each one.
The goal is to be able to organise the information so I'm able to copy and paste the information the from the Collection Box (DC:DK) as needed so I don't have to painstakingly extract the information bit by bit
For Example...
I have made a box in Columns CF:CN which only mirrors the information I require.
Problem is when I'm not using certain rows the information gets hard to read because of the cluster,
As you might see I've tried to overcome this with basic cell formatting to highlight the information that I'm using at the time
Also the cells in columns CF:CN has cell references applied so I can change the output in columns as needed.
This would be ideal for me to keep.
I'm not sure on the boundaries of the script, but is there a way that when the information is copied to the collection box so it can still utilize the cell reference to change the information without me having to re-enter?
Here is Sheet
Information is in Update Price Tab
https://docs.google.com/spreadsheets/d/1UdYCqgKEGJeh4KajxQWfTCi-JRpQgGM7435Q_VwHIH8/edit?usp=sharing
a script for copy-over values only is:
function moveValuesOnly() { var ss = SpreadsheetApp.getActiveSpreadsheet();
var source = ss.getRange('Sheet1!A1');
source.copyTo(ss.getRange('Sheet1!B1'), {contentsOnly: true}); }
this particular one will copy values from Sheet1!A1 to Sheet1!B1 if attached to a button
How to Get the currently selected cell/range? was asked 3.5 years ago, but I'm hoping maybe some progress was made since then.
I'd like to make an interactive spreadsheet where there's a boolean grid that will display more information about the status of the currently selected cell in a static location, allowing users to quickly navigate using the arrow keys.
Referencing the previous instance of this question, I tried using the custom function below to get the cell address, although this isn't very dynamic.
function currentCell() {
return SpreadsheetApp.getActive().getActiveRange().getA1Notation();
}
When testing, this function returns the address of the cell the function is called from. I've tried pressing F5 while highlighting another cell and nothing happened. I've also dragged the formula across a selection and each cell only contains its own address (according to the documentation, it should contain the range).
I've also read Henrique's post on caching from 2012, and while I don't completely understand it, I get that we could not get scripts which update without edits being made or manual formula updates.
I would ideally like for the current cell to be tracked without any extra prompts from the user besides arrow key navigation or clicking to select a cell, but if pressing a non-altering key (like Enter) would allow for tracking, that would be fine. I also only need the selected cell, rather than a range, if that makes things easier.
Explicit Question: Is it possible to track the position of the currently selected cell in Google Sheets and store that position in a separate cell? If not, is there a way to do this without altering cell values?
EDIT: Adding an example for clarity. In this conceptual example, A2 =currentCell() as described above. If I were to hit the right arrow key, A2 would update to display I4, since it is now the current selection.
EDIT2: Jason Allshorn's response to Google app script monitor spreadsheet selected ranges appears to give a way of displaying the current selection (range) on the HTML input text. I'd like to do this, but store the value in a static cell on the sheet rather than input text. I'm new to scripting in Sheets and really only know what I've found for resolving this issue, so if I'm overlooking something, please let me know. I did look at Jason's example sheet and it wasn't clear to me what was actually happening there.
You will have to apply the technique suggested on How do I make a Sidebar display values from cells?. This consist on using using client-side code to constantly pulling values from the spreadsheet and then do the corresponding task.
One approach is to use a side-panel with an input field to set the cells to be tracked and another input field to set the destination cell.
You will have to use the onSelectionChange event in the app script to capture any selection change and then get the range name and put it in desired cell.
Something like the below:
function onSelectionChange(e) {
const range = e.range;
//Return in case of multi cell selection
if(range.getNumRows() !== 1 || range.getNumColumns() !== 1) return;
SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange("A2").setValue(range.getA1Notation());
}
You can see the official documentation here
I have a Google Spreadsheet like this with a chart and a dropdown menu. I would like the data range of that chart to update based on a value selected from a dropdown menu.
I thought I might be able to add a Google App Script to the dropdown menu, but I can't find a way to add such script to anything but a drawing. Can someone tell me how to achieve this? Or point me into the right direction (Doc link?) as I'm new to both Google Spreadsheets and App Scripts.
Update:
From the comments it seems using App Scripts onEdit trigger might work.
The idea would be
to trigger onEdit when the value from the dropdown cell changes
fetch the cell value to use as an argument for another function
that in turn alters the data range of a chart.
As far as I can see onEdit triggers with changes made to any cell. Is there a way to limit this trigger to specific cells/ranges?
If I were you, I would use your drop-down menu as reference in a Query(). Often, I'll use a Query() in a hidden section of columns on my sheet, and use that hidden section as the data range for my charts. For example, if your drop down was in A1 you could have in B1 a Query() that uses a cell reference to find your data, and then hide columns B through however many you need to display your data. Then you make your data range B1:D (or whatever the range actually ended up being). Your example sheet has been moved to your trash, but if you share a data set with me, I could show you a pertinent example. Here is a less than pertinent example Ta-Da. I know that it is probably too general to use for your specific case, but perhaps if we knew more we could point you to a more specific work-around.