Exporting Multiple Schedules with Custom File Names (Native Nodes Only)

Hello Dynamo forums,

Hope everyone is doing well. I am looking for a bit of advice on a script I am building to export schedules.

Context

We recently moved over to Revit 2026. I was previously using a custom pyRevit tool for this, but our IT environment is quite restricted and the supporting plugins are no longer available in our catalogue. Because of this, I am back to using Dynamo and need to stick strictly to native, out-of-the-box nodes without installing any custom packages.

I came across this forum post which was really useful for getting started:

I also found these older discussions from 2016 and 2017:

I am unsure if the methods in these older posts are still relevant or up to date for Revit 2026 and Dynamo v3.6.2.

So far, I have managed to filter down to the exact schedules I need. However, I seem to have hit a wall where Dynamo only wants to export them one at a time rather than all together. I wanted to check if anyone can confirm if this is a known limitation with native nodes, or if I am just missing something with how my list is set up.

Why I need this

I am currently testing model upgrades done natively versus using Autodesk Forma. We are aiming for a very high pass rate as we will eventually be upgrading around 800 models at a time, so I need to compare the exported schedules across different versions and upgrade methods to see how much cleanup work might be needed. This is why having precise, structured file names is so important for tracking.

Software Versions
  • Revit: 2026

  • Dynamo: 3.6.2

What I am trying to achieve
  1. Export all filtered schedules in one go (or loop through them automatically).

  2. Automatically name the exported files using this format: Revit Model File Name_Revit Version Year-Custom Text-Revit Schedule Name.

If standard nodes cannot handle exporting multiple schedules or setting this exact file name, I am happy to use a standard Python script node to make it work.

Thanks in advance for any help or pointers!

Would you like to make any further adjustments, or is this ready for you to post?

Hi we have ootb nodes for export schedules, have you tried that ??

Hi @sovitek

Apologies for missing the workspace image in my original post, it has been a while since I was last on the forums! Please find the screenshot attached.

Workspace Image

The script is running now, but the output file name is not quite right. At the moment, it is using a Code Block with a+"\\"+b+".csv";.

I need the file name to follow this structure: Revit Model File Name_Revit Version Year-Custom Text-Revit Schedule Name

Is it possible to automatically acquire or handle these parts within the graph?

  • Revit Model File Name

  • Revit Version Year

  • Custom Text: A way to choose between predefined options for the ‘Custom Text’ part of my file name

  • Revit Schedule Name: Filtering out the ScheduleView(Name = ) text that is currently being appended to the name

Any suggestions on how best to construct this string would be greatly appreciated.

thanks
yeah i guess but not sure with version OOTB…

No need for a file path node.

Start with Document.Current, then Document.FilePath, then String.Split, then List.LastItem.

But if you’re going to take the speed hit and use Python then why not do the full path in one Python node?

The standard Python template has a variable for app which is the application, and one for doc which is the document. The app variable should have a property for VersionNumber, and the doc variable should have a property for Title. Assuming you put the schedules as IN[0] for the Python node, and your custom text as IN[1] using either a custom selection node or a String node then you can do a one liner along the lines of OUT =[ “{} - {} - {} - {}.CSV”.format(doc.Title, app.Version, IN[1], i) for i in IN[0] ]

Hi @sovitek

Thank you, this is really helpful.

The issue I am running into now is that the File Path node requires selecting an individual file for the first part of the CSV name. While the output string from the Code Block `a+“_”+b+“-”+c+“-”+d+“.csv”;` looks correct, it only generates a single file name rather than creating names for all the filtered schedules in my list.

Because the Directory Path node was replaced with the File Path node, no schedules are being generated in the target folder. How can I feed the directory back into the export node while maintaining this naming structure across the whole list of schedules?

yeah im not so clever…and sure i would do everything with python itself , i guees :wink:

Hi @jacob.small

Thanks for your reply. I updated the script using the current document and added a few extra nodes, which successfully generated the exact file naming structure I needed.

However, I am now unsure how to properly specify and connect my desired directory path so that all filtered schedules in the list export to that location. I have attached my updated workspace below for reference.

Workspace Image

This text will be hidden

Because of this

Not sure if this is the case but i noticed some nodes want (requires?)
a List input (so with Indices).

Hi @bvs1982

Removing that node resolved the issue, and all my schedules are now displaying correctly in the list with the right names.

I have also replaced two of the Code Blocks with String nodes so I can enter my custom text inputs directly through Dynamo Player.

The final step I need to resolve is correctly specifying the target folder path so all files export to that location. I have attached my updated workspace below for reference.

Workspace Image

This text will be hidden

@fintan.sumners

For future reference It would also help if you post what (the) warning(s) says.

EDIT
But you still need a path and not just a name.

PS
It looks like your Path + Schedule Name will become very long.
You might get issue later because of that.
Like Copy - Pasting in Windows Explorer.

Hi @bvs1982

Apologies I have included the warning below:

Warning:
ScheduleView.Export operation failed.
There was an error exporting this schedule

My guess is that Jacob meant you don’t need the top node (1) in my screenshot necessarily,
but can also do something like (2) in my screenshot.

You were ahead of me @sovitek

Was about to say that, but we complemented each other :grinning_face_with_smiling_eyes:.

Yes - there is no need for the file path, but you’ll still need a directory path. You could append it within the Python by adding it as another input to the node and modifying the code accordingly @fintan.sumners.

Hi @bvs1982

Thanks for highlighting that. I am aware of this aspect and have taken it into consideration for the workflow.

This exercise is purely for local testing on a single machine at this stage. The overall process will be further developed and optimized before any future deployment.

Hi @jacob.small @bvs1982

I have managed to get the script working. I realized the Code Block creating the file name was missing the initial directory input step that was present in a previous version of my script.

Feeding the directory path into the string combination solved the export issue. I have attached my updated workspace below for reference.

Workspace Image

This text will be hidden

Glad you’re sorted - try to mark a solution somewhere (even if it’s your own) so others who come up with similar problems can find a solution more readily.