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

modify excel file (business) header names with a flow

Hi All,

I have an excel file that gets uploaded automatically and saved to a SharePoint site (teams). The column names will include customer data and and data for each month of the financial Year.. Jul-23, Aug-23.... Jun-24. I am trying to find a way to dynamically remove the years from the table headers so its just Jul, Aug, Sept, Oct...etc..

 

 

id	Customer Description	Customer State	Jul-23	Aug-23	Sep-23	Oct-23	Nov-23	Dec-23	Jan-24	Feb-24	Mar-24	Apr-24	May-24	Jun-24

to
															
id	Customer Description	Customer State	Jul	Aug	Sep	Oct	Nov	Dec	Jan	Feb	Mar	Apr	May	Jun

 

 


Is something like this possible with Power Automate?


1 ACCEPTED SOLUTION

Accepted Solutions

Hi @freddy65 

 

Got it where the issue was. Actually I have assumed columns would be in format- Jan-2024, Feb-2024 etc. so the code was done in that way. Now it can work with any year formats, but assuming month format would be of MMM

 

Try this script

function main(workbook: ExcelScript.Workbook, sheetname:string, tablename:string) {
    // Get the active worksheet
    let sheet = workbook.getWorksheet(sheetname);

    // Get all tables on the active worksheet
    let table = sheet.getTable(tablename);

    // Define a regex pattern to match "month-year"
    const pattern = /^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-\d+$/i;
	let headers: string[] = table.getHeaderRowRange().getValues()[0] as string[];
	let newHeaders = headers.map(header => {
            if (pattern.test(header)) {
                // Split the header by '-'
                let [month, year] = header.split('-');
                return month; // Return the month part only
            }
            return header; // Return the original header if no match
        });
	table.getHeaderRowRange().setValues([newHeaders]);

}

 

See how it worked

before running the script-

Nived_Nambiar_0-1718777374230.png

 

After running script-

Nived_Nambiar_1-1718777391290.png

 

Hope it helps !

Thanks & Regards,

Nived N 🚀

LinkedIn: Nived N's LinkedIn
YouTube: Nived N's YouTube Channel
Blog: Nived Nambiar's Blogs

🔍 Found my answer helpful? Please consider marking it as the solution!
Your appreciation keeps me motivated. Thank you! 🙌

 

View solution in original post

11 REPLIES 11

Hi @freddy65 

 

Run office script which can help to remove the year component from table headers

 

Use this office script for this purpose

function main(workbook: ExcelScript.Workbook) {
  // Get the active worksheet
  let sheet = workbook.getActiveWorksheet();

  // Get all tables on the active worksheet
  let tables = sheet.getTables();

  // Define a regex pattern to match "month-year"
  const pattern = /^(January|February|March|April|May|June|July|August|September|October|November|December)-\d{4}$/i;

  // Loop through each table
  tables.forEach(table => {
    // Get the table headers
    let headers = table.getHeaderRowRange().getValues()[0];

    // Loop through each header and modify if it matches the pattern
    let newHeaders = headers.map(header => {
      if (pattern.test(header)) {
        // Split the header by '-'
        let [month, year] = header.split('-');
        return month; // Return the month part only
      }
      return header; // Return the original header if no match
    });

    // Set the modified headers back to the table
    table.getHeaderRowRange().setValues([newHeaders]);
  });
}

 

Use run script to run the office script as well in Power Automate.

Nived_Nambiar_0-1718590969978.png

 

Note that- due to some changes as per your requirement - there may be some changes in office script needed.

 

Thanks & Regards,

Nived N 🚀

LinkedIn: Nived N's LinkedIn
YouTube: Nived N's YouTube Channel
Blog: Nived Nambiar's Blogs

🔍 Found my answer helpful? Please consider marking it as the solution!
Your appreciation keeps me motivated. Thank you! 🙌

 

Thank you for the quick response, as the file will be overridden over and over automatically I am unable to use a script which is why I was hoping for a different solution.  Thanks again

Hi @freddy65 

 

You can select script from run script- i think it won't get overridden all the time when file is overridden as it is stored separately.

 

Thanks & Regards,

Nived N 🚀

LinkedIn: Nived N's LinkedIn
YouTube: Nived N's YouTube Channel
Blog: Nived Nambiar's Blogs

🔍 Found my answer helpful? Please consider marking it as the solution!
Your appreciation keeps me motivated. Thank you! 🙌

 

Hi @Nived_Nambiar 

I am giving this a go as I do not see any other solution. I have added the script to the excel file as my first step to then test on another file however I am getting the following errors.. Do I need to change the formatting of some of the header columns?

freddy65_0-1718600485140.png

 

Hi @freddy65 

 

Yesterday i was not able to try the script in an excel file due to some issues. I have updated the script like below and i have tested it , it is working fine.

 

function main(workbook: ExcelScript.Workbook, sheetname:string, tablename:string) {
    // Get the active worksheet
    let sheet = workbook.getWorksheet(sheetname);

    // Get all tables on the active worksheet
    let table = sheet.getTable(tablename);

    // Define a regex pattern to match "month-year"
    const pattern = /^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sept|Oct|Nov|Dec)-\d{4}$/i;
	let headers: string[] = table.getHeaderRowRange().getValues()[0] as string[];
	let newHeaders = headers.map(header => {
            if (pattern.test(header)) {
                // Split the header by '-'
                let [month, year] = header.split('-');
                return month; // Return the month part only
            }
            return header; // Return the original header if no match
        });
	table.getHeaderRowRange().setValues([newHeaders]);

}

 

Here you have to pass 2 parameters- one is sheet name and other is table name where the data to changed is present.

 

Thanks & Regards,

Nived N 🚀

LinkedIn: Nived N's LinkedIn
YouTube: Nived N's YouTube Channel
Blog: Nived Nambiar's Blogs

🔍 Found my answer helpful? Please consider marking it as the solution!
Your appreciation keeps me motivated. Thank you! 🙌

 

Hi @Nived_Nambiar 

 

Thanks for getting back to me, much appreciated. I tried the new script in Excel and put both parameters in the code and the code runs but does not produce the results. Is there a way to test the output as I am new to Type script? Thanks again for the assist! 

I made the following changes:

let sheet = workbook.getWorksheet("MM Budget");
...
 let table = sheet.getTable("Data");

Hi @freddy65 

 

did you hardcoded that in code?- I have made the code to take from parameters the values - sheet name and table name.

 

Could you share how script looks finally in your case ?

 

Thanks & Regards,

Nived N 🚀

LinkedIn: Nived N's LinkedIn
YouTube: Nived N's YouTube Channel
Blog: Nived Nambiar's Blogs

🔍 Found my answer helpful? Please consider marking it as the solution!
Your appreciation keeps me motivated. Thank you! 🙌

 

Hi @Nived_Nambiar 

I made no other changes to your code. When I used your code it seems it can not find the sheetname or tablename so I thought I would hard code this in. With your code directly in Excel, It comes up with the following message, when I hardcode the sheet name then I get the same error with the tablename. The only thing I have not mentioned about my headers is that there are many more columns before the Month-Year columns but I don't see this as an issue.

Line 3: Workbook getWorksheet: The argument is invalid or missing or has an incorrect format.

Apologies, I see what you did with the parameters and it did do something using Automate but it changed all years to 2024?

From:
Jul-23	Aug-23	Sep-23	Oct-23	Nov-23	Dec-23	Jan-24	Feb-24	Mar-24	Apr-24	May-24	Jun-24

To:
Jul-24	Aug-24	Sep-24	Oct-24	Nov-24	Dec-24	Jan-24	Feb-24	Mar-24	Apr-24	May-24	Jun-24

 

Hi @freddy65 

 

Got it where the issue was. Actually I have assumed columns would be in format- Jan-2024, Feb-2024 etc. so the code was done in that way. Now it can work with any year formats, but assuming month format would be of MMM

 

Try this script

function main(workbook: ExcelScript.Workbook, sheetname:string, tablename:string) {
    // Get the active worksheet
    let sheet = workbook.getWorksheet(sheetname);

    // Get all tables on the active worksheet
    let table = sheet.getTable(tablename);

    // Define a regex pattern to match "month-year"
    const pattern = /^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-\d+$/i;
	let headers: string[] = table.getHeaderRowRange().getValues()[0] as string[];
	let newHeaders = headers.map(header => {
            if (pattern.test(header)) {
                // Split the header by '-'
                let [month, year] = header.split('-');
                return month; // Return the month part only
            }
            return header; // Return the original header if no match
        });
	table.getHeaderRowRange().setValues([newHeaders]);

}

 

See how it worked

before running the script-

Nived_Nambiar_0-1718777374230.png

 

After running script-

Nived_Nambiar_1-1718777391290.png

 

Hope it helps !

Thanks & Regards,

Nived N 🚀

LinkedIn: Nived N's LinkedIn
YouTube: Nived N's YouTube Channel
Blog: Nived Nambiar's Blogs

🔍 Found my answer helpful? Please consider marking it as the solution!
Your appreciation keeps me motivated. Thank you! 🙌

 

Hi @Nived_Nambiar ,
That worked beautifully, this has also helped me understand what more I can do with scripting so thank you very much for your help!

Helpful resources

Announcements

Community will be READ ONLY July 16th, 5p PDT -July 22nd

Dear Community Members,   We'd like to let you know of an upcoming change to the community platform: starting July 16th, the platform will transition to a READ ONLY mode until July 22nd.   During this period, members will not be able to Kudo, Comment, or Reply to any posts.   On July 22nd, please be on the lookout for a message sent to the email address registered on your community profile. This email is crucial as it will contain your unique code and link to register for the new platform encompassing all of the communities.   What to Expect in the New Community: A more unified experience where all products, including Power Apps, Power Automate, Copilot Studio, and Power Pages, will be accessible from one community.Community Blogs that you can syndicate and link to for automatic updates. We appreciate your understanding and cooperation during this transition. Stay tuned for the exciting new features and a seamless community experience ahead!

Summer of Solutions | Week 4 Results | Winners will be posted on July 24th

We are excited to announce the Summer of Solutions Challenge!    This challenge is kicking off on Monday, June 17th and will run for (4) weeks.  The challenge is open to all Power Platform (Power Apps, Power Automate, Copilot Studio & Power Pages) community members. We invite you to participate in a quest to provide solutions to as many questions as you can. Answers can be provided in all the communities.    Entry Period: This Challenge will consist of four weekly Entry Periods as follows (each an “Entry Period”)   - 12:00 a.m. PT on June 17, 2024 – 11:59 p.m. PT on June 23, 2024 - 12:00 a.m. PT on June 24, 2024 – 11:59 p.m. PT on June 30, 2024 - 12:00 a.m. PT on July 1, 2024 – 11:59 p.m. PT on July 7, 2024 - 12:00 a.m. PT on July 8, 2024 – 11:59 p.m. PT on July 14, 2024   Entries will be eligible for the Entry Period in which they are received and will not carryover to subsequent weekly entry periods.  You must enter into each weekly Entry Period separately.   How to Enter: We invite you to participate in a quest to provide "Accepted Solutions" to as many questions as you can. Answers can be provided in all the communities. Users must provide a solution which can be an “Accepted Solution” in the Forums in all of the communities and there are no limits to the number of “Accepted Solutions” that a member can provide for entries in this challenge, but each entry must be substantially unique and different.    Winner Selection and Prizes: At the end of each week, we will list the top ten (10) Community users which will consist of: 5 Community Members & 5 Super Users and they will advance to the final drawing. We will post each week in the News & Announcements the top 10 Solution providers.  At the end of the challenge, we will add all of the top 10 weekly names and enter them into a random drawing.  Then we will randomly select ten (10) winners (5 Community Members & 5 Super Users) from among all eligible entrants received across all weekly Entry Periods to receive the prize listed below. If a winner declines, we will draw again at random for the next winner.  A user will only be able to win once overall. If they are drawn multiple times, another user will be drawn at random.  Individuals will be contacted before the announcement with the opportunity to claim or deny the prize.  Once all of the winners have been notified, we will post in the News & Announcements of each community with the list of winners.   Each winner will receive one (1) Pass to the Power Platform Conference in Las Vegas, Sep. 18-20, 2024 ($1800 value). NOTE: Prize is for conference attendance only and any other costs such as airfare, lodging, transportation, and food are the sole responsibility of the winner. Tickets are not transferable to any other party or to next year’s event.   ** PLEASE SEE THE ATTACHED RULES for this CHALLENGE**   Week 1 Results: Congratulations to the Week 1 qualifiers, you are being entered in the random drawing that will take place at the end of the challenge.   Community MembersNumber SolutionsSuper UsersNumber Solutions Deenuji 9 @NathanAlvares24  17 @Anil_g  7 @ManishSolanki  13 @eetuRobo  5 @David_MA  10 @VishnuReddy1997  5 @SpongYe  9JhonatanOB19932 (tie) @Nived_Nambiar  8 @maltie  2 (tie)   @PA-Noob  2 (tie)   @LukeMcG  2 (tie)   @tgut03  2 (tie)       Week 2 Results: Congratulations to the Week 2 qualifiers, you are being entered in the random drawing that will take place at the end of the challenge. Week 2: Community MembersSolutionsSuper UsersSolutionsPower Automate  @Deenuji  12@ManishSolanki 19 @Anil_g  10 @NathanAlvares24  17 @VishnuReddy1997  6 @Expiscornovus  10 @Tjan  5 @Nived_Nambiar  10 @eetuRobo  3 @SudeepGhatakNZ 8     Week 3 Results: Congratulations to the Week 3 qualifiers, you are being entered in the random drawing that will take place at the end of the challenge. Week 3:Community MembersSolutionsSuper UsersSolutionsPower Automate Deenuji32ManishSolanki55VishnuReddy199724NathanAlvares2444Anil_g22SudeepGhatakNZ40eetuRobo18Nived_Nambiar28Tjan8David_MA22   Week 4 Results: Congratulations to the Week 4 qualifiers, you are being entered in the random drawing that will take place at the end of the challenge. Week 4:Community MembersSolutionsSuper UsersSolutionsPower Automate Deenuji11FLMike31Sayan11ManishSolanki16VishnuReddy199710creativeopinion14Akshansh-Sharma3SudeepGhatakNZ7claudiovc2CFernandes5 misc2Nived_Nambiar5 Usernametwice232rzaneti5 eetuRobo2   Anil_g2   SharonS2  

Check Out | 2024 Release Wave 2 Plans for Microsoft Dynamics 365 and Microsoft Power Platform

On July 16, 2024, we published the 2024 release wave 2 plans for Microsoft Dynamics 365 and Microsoft Power Platform. These plans are a compilation of the new capabilities planned to be released between October 2024 to March 2025. This release introduces a wealth of new features designed to enhance customer understanding and improve overall user experience, showcasing our dedication to driving digital transformation for our customers and partners.    The upcoming wave is centered around utilizing advanced AI and Microsoft Copilot technologies to enhance user productivity and streamline operations across diverse business applications. These enhancements include intelligent automation, AI-powered insights, and immersive user experiences that are designed to break down barriers between data, insights, and individuals. Watch a summary of the release highlights.    Discover the latest features that empower organizations to operate more efficiently and adaptively. From AI-driven sales insights and customer service enhancements to predictive analytics in supply chain management and autonomous financial processes, the new capabilities enable businesses to proactively address challenges and capitalize on opportunities.    

Updates to Transitions in the Power Platform Communities

We're embarking on a journey to enhance your experience by transitioning to a new community platform. Our team has been diligently working to create a fresh community site, leveraging the very Dynamics 365 and Power Platform tools our community advocates for.  We started this journey with transitioning Copilot Studio forums and blogs in June. The move marks the beginning of a new chapter, and we're eager for you to be a part of it. The rest of the Power Platform product sites will be moving over this summer.   Stay tuned for more updates as we get closer to the launch. We can't wait to welcome you to our new community space, designed with you in mind. Let's connect, learn, and grow together.   Here's to new beginnings and endless possibilities!   If you have any questions, observations or concerns throughout this process please go to https://aka.ms/PPCommSupport.   To stay up to date on the latest details of this migration and other important Community updates subscribe to our News and Announcements forums: Copilot Studio, Power Apps, Power Automate, Power Pages

Users online (849)