In this post i will describe a new custom node for querying all schedules that are not placed on sheets. It will output two lists of elements (ViewSchedules), one which contains all schedules currently placed on sheets and one that contains schedules not yet placed. Do not be surprised if the total number of schedules shown by those two lists is more than what you currently have in the browser. Why? Because they will also pick up schedules that you are using inside of families like TitleBlocks. For example a Revision Table inside of TitleBlock family is a schedule and it will be displayed on the second list with Schedules on Sheet. As a matter of fact it might actually count one of those as a separate instance for every sheet that you have in a project. That is surely not ideal, but I am not too worried about it at the moment.
The reason I have created this little tool is to see what schedules are on sheets and what schedules
are working schedules so that if they are not needed I can delete them. Use Element.Name node to get user readable name for every schedule. This node is fairly safe as it only queries Revit DB properties and doesn’t make any changes to the database.
Here’s a preview:
Here’s what’s under the hood of this custom node:
1. First I used the Categories node and All Elements of Category to extract all Sheets in the project. Then I used a little bit of Python loops and sets to create the two lists:
So you have probably noticed that i am converting all of the Elements to id strings. The reason I am doing that is with Python I can then make sets of those and check if any of new element ids is already in the set. When they are ElementIds (Revit API objects) i would have to use Equal() method and compare each and every one to each other vs. just looking for containment in a set. I think it’s a little dirty but it works just fine for what i am doing.
Enjoy it, and let me know if you have any questions or comments.