I’m a beginner to Powershell and CLI in general, but this task does not need to use either so I’m open to using other tools.

I’m trying to do the following:

  1. Create multiple files from a Word template.
  2. Rename each file based on a list of names found in an Excel/CSV sheet.

Thanks in advance!

  • lemmy___user@lemmy.world
    link
    fedilink
    arrow-up
    4
    ·
    3 months ago

    You should be able to use COM interoperability , specifically the OpenAsDocument() and Save() methods. You can also use COM interoperability to read from Excel, but using ImprtFrom-CSV would be much easier. Then you just iterate over the file names, and for each one open the template as a document, then save it as the filename.

  • purplemonkeymad@programming.dev
    link
    fedilink
    arrow-up
    2
    ·
    3 months ago

    For csv import, use import-csv and loop on the results:

    Import-csv myfile.csv | foreach-object {
    

    Templates should be easy, just copy the template to a new file with the docx extension. Use one of the columns (in this case “name” as the column header,) from the csv for the name:

        $newname = $_.name + '.docx'
        Copy-item 'template.dotx' $newname
    }
    
    • BobTheDestroyerOP
      link
      fedilink
      arrow-up
      1
      ·
      3 months ago

      So I’m new to all this. When I enter the first command with my csv file and doc file included, it just opens the word doc. Wasn’t sure what I should do next.

      • BobTheDestroyerOP
        link
        fedilink
        arrow-up
        1
        ·
        3 months ago

        Actually nevermind that question. Just realized the command was split.

        I’m assuming I need to replace the name portion of the 2nd line. What do I input if the data is a list that starts in A1?

    • BobTheDestroyerOP
      link
      fedilink
      arrow-up
      1
      ·
      3 months ago

      Hey this worked for me yesterday but now I’m having trouble getting it to work again. It just outputs a Word doc titled ‘.docx’ now.

        • BobTheDestroyerOP
          link
          fedilink
          arrow-up
          1
          ·
          3 months ago

          By the way, what would be the equivalent code when using a text file for the list of names rather than a csv file?

        • BobTheDestroyerOP
          link
          fedilink
          arrow-up
          1
          ·
          3 months ago

          Ah, I think that was it. Forgot about the column heading. Thanks for your help!

  • mikyopii@programming.dev
    link
    fedilink
    arrow-up
    4
    arrow-down
    2
    ·
    3 months ago

    Does it have to be a Word template? If you can get that into a plain text format this will be much easier. There may be a module that you can download online otherwise you are probably going to have to do some painful parsing after you import the file using “Get-Content”.

    Do you have any code written? This sounds like something that ChatGPT could probably handle pretty well.

    • BobTheDestroyerOP
      link
      fedilink
      arrow-up
      2
      ·
      3 months ago

      It does have to be a Word template. It has a bar graph and various texts.

      • mikyopii@programming.dev
        link
        fedilink
        arrow-up
        2
        ·
        3 months ago

        Yeah, I looked at the plain text of a .dotx file. That’s unparsable. The other poster probably has the right idea on how to get information out of the file.

  • Vince@lemmy.world
    link
    fedilink
    arrow-up
    2
    ·
    edit-2
    3 months ago

    Sounds like you’re just copying a template to new files based on a csv? You don’t have to edit anything inside the word files at all?

    If that’s the case, just load the csv file, I think the command is Read-Content, loop through each line, split by ‘,’ parse whatever name data you need and copy your template.docx to your new file.docx

  • stewie410@programming.dev
    link
    fedilink
    arrow-up
    1
    ·
    edit-2
    3 months ago

    If the Excel/CSV sheet is actually a CSV file, Import-Csv in powershell will return the content as an array of objects, where each row is one element in the array.

  • TCB13@lemmy.world
    link
    fedilink
    English
    arrow-up
    2
    arrow-down
    1
    ·
    edit-2
    3 months ago

    A good / better option for this is AutoIt. It can interact directly with MS Office via internal APIs and it also has a function to read CSVs.