Best Of
Re: Dashboard - Chart Help, multiple responses in one column
Try this:
=COUNTIFS({PEER REVIEW ADMIN Range 1}, HAS(@cell, $[Primary Column]@row), {PERR REVIEW ADMIN Range 2}, @cell = [Column2]$1)
If you enter the above into the top left corner of the table ([Column2]2), you should be able to dragfill this down and to the right to fill the rest of your table without having to manually update names or work types within the formula.
Paul Newcome
Re: Formula to check a box if a PARTIAL string is present in a specific cell in a descendant row.
@Darren Mullen Works like a charm. Thanks a million for the quick response.
Re: Invalid columns in workflows when copying a complete workflow
Hi @Eduardo Vazquez,
Thanks for coming back and updating this thread! I have reached out to the Support team and can confirm this bug has been resolved.
Thanks,
Georgie
Georgie
Re: Sheet Change Notification Settings in Personal Settings
Hi guys @kowal and @Shirley Ho
I doubt that the setting Shirley is referring to is blocking other user from receiving notifications, as this setting applies to your own changes.
I had a quick read on
and this little sentence over here is what got me to my conclusion
Including "my changes" only refers to changes that you make. So this would not affect how a different user is notified of changes.
From what I understand, what Shirley is saying is that users have found a way to NOT be notified at all.
Here are a few other articles that address that issue
It could be that there is an issue with the "allow list" - this is relevant if the user is new. And not if a user used to receive notifications and now they don't
https://help.smartsheet.com/articles/2476586-control-who-is-notified-about-alerts-and-requests
Hoping this helps :-)
MarceHolzhauzen
Re: Data Shuttle - don't delete certain rows
I see the options I have and have tried a mixture of them but can't seem to make any of them work. I don't believe this is possible using Data Shuttle, I will most likely setup automation to move off anything that does not meet the criteria to remain on the open projects list. Thanks!
Re: Is there a way to customize Calendar?
Unfortunately, Smartsheet's Calendar View currently does not support large or full-size image previews — any images (added as attachments or via a cell) will only appear as small thumbnails, and there's no built-in option to resize them in Calendar View.
If you need a more visual, branded calendar experience, you might consider:
Exporting Smartsheet data to a custom Power BI or Tableau calendar, where visuals can be fully customized.
Naeem Ejaz
Re: Formatting Dashboard Metrics with Commas (,)
Thanks so much @Darla Brown ! It worked!
Re: How to keep the sort order of grid view in card view
Hi Chris,
Yes, I submitted the enhancement request under the title "Maintain or enforce sort from Grid view in Card view". I do not know if it helps to add another request to give the idea more weight.
Hopefully the feature makes it into the queue for development soon.
Matt
Re: Is there a way to maintain currency formatting when within a formula?
Thank you for your help, @AdamSYNH! Because I needed to do this for about 8 different currency calculations, it would have been a few too many helper columns. I tried the solution that Paul had shared so I could add fewer columns.
@Paul Newcome, Thank you for your help! I needed to adapt the formula a little; I noticed that if there was a trailing 0, it would not pull it over. For example, "$45,000.10" would display as "$45,000.1" which is a little funky for the salary letters I needed. I had ChatGPT help me with the minor revision (as well as find/replace when I would move on to the next column) and got the formula below:
="$" + IF(LEN(INT(ABS([Base Contract Salary]@row ))) <= 3, RIGHT(INT(ABS([Base Contract Salary]@row )), 3), IF(LEN(INT(ABS([Base Contract Salary]@row ))) <= 6, IFERROR(IFERROR(MID(INT(ABS([Base Contract Salary]@row )), LEN(INT(ABS([Base Contract Salary]@row ))) - 5, 3), LEFT(INT(ABS([Base Contract Salary]@row )), LEN(INT(ABS([Base Contract Salary]@row ))) - 3)), "") + "," + RIGHT(INT(ABS([Base Contract Salary]@row )), 3), IF(LEN(INT(ABS([Base Contract Salary]@row ))) <= 9, IFERROR(IFERROR(MID(INT(ABS([Base Contract Salary]@row )), LEN(INT(ABS([Base Contract Salary]@row ))) - 8, 3), LEFT(INT(ABS([Base Contract Salary]@row )), LEN(INT(ABS([Base Contract Salary]@row ))) - 6)), "") + "," + IFERROR(IFERROR(MID(INT(ABS([Base Contract Salary]@row )), LEN(INT(ABS([Base Contract Salary]@row ))) - 5, 3), LEFT(INT(ABS([Base Contract Salary]@row )), LEN(INT(ABS([Base Contract Salary]@row ))) - 3)), "") + "," + RIGHT(INT(ABS([Base Contract Salary]@row )), 3), IF(LEN(INT(ABS([Base Contract Salary]@row ))) <= 12, IFERROR(IFERROR(MID(INT(ABS([Base Contract Salary]@row )), LEN(INT(ABS([Base Contract Salary]@row ))) - 11, 3), LEFT(INT(ABS([Base Contract Salary]@row )), LEN(INT(ABS([Base Contract Salary]@row ))) - 9)), "") + "," + IFERROR(IFERROR(MID(INT(ABS([Base Contract Salary]@row )), LEN(INT(ABS([Base Contract Salary]@row ))) - 8, 3), LEFT(INT(ABS([Base Contract Salary]@row )), LEN(INT(ABS([Base Contract Salary]@row ))) - 6)), "") + "," + IFERROR(IFERROR(MID(INT(ABS([Base Contract Salary]@row )), LEN(INT(ABS([Base Contract Salary]@row ))) - 5, 3), LEFT(INT(ABS([Base Contract Salary]@row )), LEN(INT(ABS([Base Contract Salary]@row ))) - 3)), "") + "," + RIGHT(INT(ABS([Base Contract Salary]@row )), 3))))) + "." + RIGHT("00" + VALUE(ROUND(([Base Contract Salary]@row - INT([Base Contract Salary]@row )) * 100, 0)), 2)
I wanted to include it so folks have it, in case they need that formula later!
Thank you both!
Re: Automate Sending Welcome Email to New Smartsheet Users in our Company?
Hey @NeilKY!
Let skip question 1 for a second and jump to question 2, which will help us cover question 1.
Question 2
Can I avoid having to use static column IDs if I use the code that @Brian_Richardson posted here?
Yes absolutely. He mentions that you can retrieve all of the column IDs using the Get Sheet modules. You'll be able to specify the Column Name in your code, and then have your JavaScript code use the Column Name to dynamically find the Column ID.
Step 1: We need to add a targetColumns key into your JavaScript code. This key will come from your Get Sheet module.
Step 2: Update your Get Sheet module, make sure that it retrieves all of the columns.
Step 3: Add this key into your JavaScript module.
Step 4: Update your Javascript code to use merge the userArray and the targetColumns array.
This time I added comments into the script so that it's more clear what each step does. This script expects you to provide it with a key named userArray and another key named targetColumns.
You can modify the script however you want. But currently, it expects targetColumns to contain a column named "Email Column".
The script loops over all of the users and creates a row for each user. Each row has 3 cells, for the email, firstName, and lastName.
// Key 1: userArray - contains a list of all of the users.
// Key 2: targetColumns - contains a list of all of the columns in the sheet.
// Map the column title to the column ID.
const columnMap = new Map();
targetColumns.forEach((column) => columnMap.set(column.title, column.id));
// Create an array of all of the rows that we want to write into the sheet.
const rowsToWrite = [];
// Iterate over each user, and create a row to write into the sheet for the user.
for (const user of userArray) {
rowsToWrite.push({
// Add this row to the bottom of the sheet.
toBottom: true,
cells: [
{
columnId: columnMap.get("Email Column"),
value: user.email,
},
{
columnId: columnMap.get("First Name Column"),
value: user.firstName,
},
{
columnId: columnMap.get("Last Name Column"),
value: user.lastName,
},
],
});
}
// Return the payload so that we can send it to the API.
return rowsToWrite;
This script returns an array of rows, and you can send this straight to the Smartsheet API. This is what it looks like:
[
{
"toBottom": true,
"cells": [
{
"columnId": "1000",
"value": "email1@example.com"
},
{
"columnId": "2000",
"value": "Alice"
},
{
"columnId": "3000",
"value": "Smith"
}
]
},
{
"toBottom": true,
"cells": [
{
"columnId": "1000",
"value": "email2@example.com"
},
{
"columnId": "2000",
"value": "Bob"
},
{
"columnId": "3000",
"value": "Smith"
}
]
},
{
"toBottom": true,
"cells": [
{
"columnId": "1000",
"value": "email3@example.com"
},
{
"columnId": "2000",
"value": "Carol"
},
{
"columnId": "3000",
"value": "Smith"
}
]
}
]
Example Script
I modified the script above to provide some example data. In this script, I "hard coded" the userArray and the targetColumns with some fake data, just so that we can see exactly what the script does.
You can open an online Javascript compiler and paste the code in, to see what it does. For example, go to and then paste in this code.
In the real script, the userArray and the targetColumns should be added as keys into this JavaScript module.
// Key 1: userArray - contains a list of all of the users.
const userArray = [
{ email: "email1@example.com", firstName: "Alice", lastName: "Smith" },
{ email: "email2@example.com", firstName: "Bob", lastName: "Smith" },
{ email: "email3@example.com", firstName: "Carol", lastName: "Smith" },
];
// Key 2: targetColumns - contains a list of all of the columns in the sheet.
const targetColumns = [
{ id: "1000", title: "Email Column" },
{ id: "2000", title: "First Name Column" },
{ id: "3000", title: "Last Name Column" },
];
// Map the column title to the column ID.
const columnMap = new Map();
targetColumns.forEach((column) => columnMap.set(column.title, column.id));
// Create an array of all of the rows that we want to write into the sheet.
const rowsToWrite = [];
// Iterate over each user, and create a row to write into the sheet for the user.
for (const user of userArray) {
rowsToWrite.push({
// Add this row to the bottom of the sheet.
toBottom: true,
cells: [
{
columnId: columnMap.get("Email Column"),
value: user.email,
},
{
columnId: columnMap.get("First Name Column"),
value: user.firstName,
},
{
columnId: columnMap.get("Last Name Column"),
value: user.lastName,
},
],
});
}
// Return the payload so that we can send it to the API.
console.log(JSON.stringify(rowsToWrite));
Question 3You may not be able to answer this last question but could I just use "Array management: Extract Field from Array", for each of the fields i want in a row, then write to the sheet for each of those values in one API call?
You might be able to do this, but since you already have to use JavaScript to map the column IDs, you might as well use JavaScript to extract the user fields.
Best of luck!
SSFeatures




