cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
rnunley
Frequent Visitor

Change Name to Initials

I am using MS Forms to collect data and Power Automate to send that data to an Excel Workbook.  In the form I am collecting names as one of the fields.  I would like the flow to convert their name to their initials and write the initials to Excel.  There are only about six different names being input into the Form.  Example: John Smith = JS, Amy Johnson = AJ.  I tried using an IF expression but I cannot get that to work.

 

Thanks!

18 REPLIES 18
efialttes
Super User
Super User

Hi!
Let's assume you have "John Smith" stored in a variable called 'inputName'
If so you can convert by means of the following sequence:
Add an 'Initialize variable' name 'outputName', type string no value.
Add an 'Apply toEach' action block, assign as its input the following expression:
split(variables('inputName'),' '))
Inside the appy to each add 'Append to string' action block, name 'outputName' assign as its value the following expression:
first(item())
Finally, you can add a compose action block out of the 'Apply to eac' and assign as its input the following expression:
join(variable('outputName'),'')

There are other possible approaches, so instead an Apply to each you can use a Select action block and assign the following expression as its input
split(variables('inputName'),' '))
then assign the following expression as the mapping formula
first(item())
...and finally get the expected result by means of a Compose action block, assigning as its inpit the following expression:
join(body('Select'),'')

Hope this helps


Each time you click on any of our inspiring answers 'Thumb up' icon...
...an ewok scapes from the stormtroopers.

Be grateful, Thumbs up! Save the Galaxy for free!


Escribo sobre Power Automate en:
https://medium.com/anyone-can-automate/

Proud to be a Flownaut!



fchopo
Super User
Super User

Hi @rnunley 

I have used the following flow with some expressions to solve what you want to achieve:

forms.png

In this case, the field  body('Get_response_details')?['r9723f014ffc146debd7eeca108b84ad0'] is the Forms field with the Name.

Here are the expressions used on each step:

1) Get the blank position between the first name and the last name: 

indexOf(body('Get_response_details')?['r9723f014ffc146debd7eeca108b84ad0'],' ')
2) Get the First Initial:
substring(substring(body('Get_response_details')?['r9723f014ffc146debd7eeca108b84ad0'],0,variables('BlankPosition')),0,1)
3) Get the LastName length:
sub(sub(length(body('Get_response_details')?['r9723f014ffc146debd7eeca108b84ad0']),variables('BlankPosition')),1)
4) Get the last name Initial:
substring(substring(body('Get_response_details')?['r9723f014ffc146debd7eeca108b84ad0'],add(variables('BlankPosition'),1),variables('LastNameLength')),0,1)
 
Hope it helps!
Ferran
 
Did I answer your question? Please consider to mark my post as a solution to help others.
Proud to be a Flownaut!
rnunley
Frequent Visitor

I got it working.  I used the "Switch" step in Power Automate along with a variable.

alrez
Community Support
Community Support

Hi,

 

That's great that you got it working! Remember to set as resolved for however helped you.

 

Regards,

 

Alex

 

-------

 

Community Support Team _ Alex Rezac
If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.

wlyttle
Helper I
Helper I

I tried your solution but I'm having issues. At the Apply to each I'm getting an error - The execution of template action 'Apply_to_each' failed: the result of the evaluation of 'foreach' expression 'split(variables('@{variables('inputName')}'),' '))' is of type 'String'. The result must be a valid array.

wlyttle_0-1643832701598.png

 

 

I followed your steps but I still cannot get it to work.  Says I need an array not string. 

KvB1
Solution Sage
Solution Sage

You can use this much more elegantly:

 

concat(substring(split(variables('inputName'),' ')[0],0,1),substring(split(variables('inputName'),' ')[1],0,1))
KvB1
Solution Sage
Solution Sage

Also this assumes that the name only consists of 2 words, sepparated by a single space, so its important to adhere to that format, or else youd have to make things dynamic

Thank you for taking the time to post. I'm not sure on how to use your solution. If you could be so kind what are the steps needed to make this work? I want to use the Displayname from the user.

KvB1
Solution Sage
Solution Sage

Oh right, so this is a person/group field in SharePoint?

 

It would be good to know where the data is coming from that you want to use, and what kind of format it has

Yes, Its a sharepoint list that is a lookup for people only and displays the Name field.

KvB1
Solution Sage
Solution Sage

Okay, so that will return to you an object. From this object, you then have to select the name. If you show the output of the action, you can find what you have to write in the expression to grab the name

Sorry , I guess i need some hand holding here. Still new to MSFlow. In my flow I initialize the variable inputName, Type Object with no value. If I set the variable it give an error needs to be a string not object. I'm not doing it right...Can you tell me what I need to do in laymans terms. 🙂 

KvB1
Solution Sage
Solution Sage

Sure, basically, there are different kinds of variables, such as string, integer, boolean, array, object, etc

 

PowerAutomate handles them differently, and some actions you can only do with some, not with others. For example, if you would have a string that holds '1', you can not use it to do math, because you would need it to be an integer.

 

Then there is object, which is basically a bunch of strings (lines of text) that belong together. 

 

You are initializing a variable, and you are telling powerautomate that it will be an object. Then you are trying to set the variable, but you are using a string. So the flow is expecting that the variable will be set with an object, because you told it that this variable is an object. So when you then try to set it using a string, it will give an error.

 

In sharepoint, the people/group column is an object. In it is stuff like the mail address, and display name. IF this object is present and passed down your flow from some previous action, and you only want to get the display name, you have to tell the flow to do this. Just because sharepoint is showing you this displayname, does not mean that this is the information your flow is receiving.

 

In general, it is good to know what kind of data comes out of actions, so you can decide what you want to grab, how you want to grab it, or if you have to change the output of the action.

 

A good habit to develop is to check the output of an action in the run history

Great info. Thank you for that. I think you went beyond what I was asking but great info and helping me learn. I was hoping you could tell me what I need to do to convert the displayName to intitals - actual steps. I spent a few hours hacking away with no good results.

KvB1
Solution Sage
Solution Sage

Alright, it is still not clear to me what the type is of the data that you will use to convert to initials.

 

If it comes from the form, its most likely a string.

 

If it comes from a sharepoint column thats defined as a person/group its an object.

 

Could you maybe show what you have so far?

It is from a SharePoint list. Person or Group - People Only - All Users. In MS Flow i want to take that First Name/Last and convert to a variable that contains only their initails. I will use that in a Send Email. I need to Flow steps to do this. Maybe soon I'll understand this more. For now I need to bug people like you to help me. 🙂

 

KvB1
Solution Sage
Solution Sage

Yeah, so the info you get is an object, and holds other information such as the users email adress, etc. 

 

The info you need is 'DisplayName', so to get that, you add ?['DisplayName'] after the name of the column, in an expression.

 

For example, if I would run a get item action, and would want the display name of the author, i would use:

outputs('Get_item')?['body/value']?['Author']?['DisplayName']
 
You can then use that inside the expression posted earlier

Helpful resources

Announcements
Power Automate News & Announcements

Power Automate News & Announcements

Keep up to date with current events and community announcements in the Power Automate community.

Community Calls Conversations

Community Calls Conversations

A great place where you can stay up to date with community calls and interact with the speakers.

Power Automate Community Blog

Power Automate Community Blog

Check out the latest Community Blog from the community!

Top Solution Authors
Users online (6,888)