Placing multiple schedules on multiple sheets

Hi there,

I want to place a certain amount of schedules (205) on corresponding sheets (205).

I already created the needed lists and coordinates. See picture: On top the sheets and on the bottom the schedules.

However schedule views don’t seem to be corresponding as a ‘normal’ view. Is there a special node to place schedules on sheets?

I hope somebody can help.

Schedules and views have different placement methods in the Revit API. If you’re curious - when placing views you use Viewport.Create, and for schedules you use ScheduleSheetInstance.Create.

Unfortunately, I don’t know of an existing node that places schedules, however you’re in luck because I have a python script that does this. I modified it a bit to act more like I’m guessing the one in your image does, based on what your Watch nodes are showing.
It expects there to be an equal number of schedules, sheets, and points and matches them up based on their order in the lists.

image

# Enable Python support and load DesignScript library
import clr
# Import RevitNodes
clr.AddReference("RevitNodes")
import Revit

# Import Revit elements & geometry conversion methods
clr.ImportExtensions(Revit.GeometryConversion)

# Import RevitAPI - This gives general access to Revit tools.
clr.AddReference("RevitAPI")
import Autodesk
from Autodesk.Revit.DB import ScheduleSheetInstance 

# Import DocumentManager & TransactionManager
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager

doc = DocumentManager.Instance.CurrentDBDocument 

# The inputs to this node will be stored as a list in the IN variables.
dataEnteringNode = IN
views = [UnwrapElement(x) for x in IN[0]]
sheets = [UnwrapElement(x) for x in IN[1]]
points = [x.ToXyz() for x in IN[2]]

zip_list = zip(views, sheets, points)

#Start Code

TransactionManager.Instance.EnsureInTransaction(doc)

created = []
for view, sheet, point in zip_list:
    new = ScheduleSheetInstance.Create(doc, sheet.Id, view.Id, point)
    created.append(new)

TransactionManager.Instance.TransactionTaskDone()

#Assign output
OUT = created

I see now it looks like SeanP beat me to the punch, but I already wrote this out so may as well share it. :slight_smile:

4 Likes

@SeanP

This is a great script, and will come in handy. Thanks for the tip.

However, this way I can only select one schedule, to place on multiple sheets.

I need to place schedule 001 on sheet 001, schedule 002 on sheet 002, schedule 003 on sheet 003, etc. (400 times in total).

Is there any way to achieve this with your script? Any help is welcome.

@stewart.skyler

Wow this is great. It works perfectly! Thanks a lot

1 Like