Schedule View Name to Views


Good Day, I’ve been trying to hide a specific column field (“Number”) on my room schedule. This should be applied to all room schedule. What I’m trying to do is to convert all ScheduleViewName into views so that it would work on the script. Please help, Thank you!

Can you show the source code of the Hide Column node?

Hi here it is

import clr
clr.AddReference('RevitAPI')
import Autodesk
from Autodesk.Revit.DB import *

clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.Elements)
from Revit.Elements import *
clr.ImportExtensions(Revit.GeometryConversion)
clr.ImportExtensions(Revit.GeometryReferences)

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

doc = DocumentManager.Instance.CurrentDBDocument
uidoc=DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument
uiapp=DocumentManager.Instance.CurrentUIApplication
app = uiapp.Application

view = doc.ActiveView

def U(elem): 
	a = UnwrapElement(elem)
	return a

schedule = UnwrapElement(IN[0])
colName = IN[1]


definit = schedule.Definition
countParameters = definit.GetFieldCount() 
# Parameter names
names = []
for i in range(countParameters):
	Parname = definit.GetField(i).ColumnHeading # Parameter Column name
	if Parname == colName:
		index = i

field = schedule.Definition.GetField(index) # schedule field

TransactionManager.Instance.EnsureInTransaction(doc)
field.IsHidden = IN[2] # 1 = Hide, 0 = Show
TransactionManager.Instance.TransactionTaskDone()
OUT = schedule



Hi @kdelacruz11221004 , let’s try this:

import clr
clr.AddReference('RevitAPI')
import Autodesk
from Autodesk.Revit.DB import *

clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.Elements)
from Revit.Elements import *
clr.ImportExtensions(Revit.GeometryConversion)
clr.ImportExtensions(Revit.GeometryReferences)

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

doc = DocumentManager.Instance.CurrentDBDocument
uidoc = DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument
uiapp = DocumentManager.Instance.CurrentUIApplication
app = uiapp.Application

view = doc.ActiveView

def U(elem): 
    if isinstance(elem, list):
        return [UnwrapElement(e) for e in elem]
    else:
        return UnwrapElement(elem)

schedules = U(IN[0])
colName = IN[1]
hide = IN[2]

results = []
for schedule in schedules:
    if isinstance(schedule, Autodesk.Revit.DB.ViewSchedule):
        definit = schedule.Definition
        countParameters = definit.GetFieldCount() 
        # Parameter names
        names = []
        index = None
        for i in range(countParameters):
            Parname = definit.GetField(i).ColumnHeading  # Parameter Column name
            if Parname == colName:
                index = i
                break

        if index is not None:
            field = schedule.Definition.GetField(index)  # schedule field

            TransactionManager.Instance.EnsureInTransaction(doc)
            field.IsHidden = hide  # 1 = Hide, 0 = Show
            TransactionManager.Instance.TransactionTaskDone()
            results.append(schedule)
        else:
            results.append(None)
    else:
        results.append(None)

OUT = results

In your previous code, you forgot to pass each schedule into a loop so it didn’t work.

Hi @Luffy11, You are amazing thank you so much for this now it works!

I do have 1 question tho, What if I want a multiple number of fields what should I edit in the script?

@kdelacruz11221004 just a little modification with loop as shown in the image and you can get the expected result.

Here’s the modified code:

import clr
clr.AddReference('RevitAPI')
import Autodesk
from Autodesk.Revit.DB import *

clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.Elements)
from Revit.Elements import *
clr.ImportExtensions(Revit.GeometryConversion)
clr.ImportExtensions(Revit.GeometryReferences)

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

doc = DocumentManager.Instance.CurrentDBDocument
uidoc = DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument
uiapp = DocumentManager.Instance.CurrentUIApplication
app = uiapp.Application

view = doc.ActiveView

def U(elem): 
    if isinstance(elem, list):
        return UnwrapElement(elem)
    else:
        return [UnwrapElement(elem)]


schedules = U(IN[0])
colName = IN[1]
hide = IN[2]

results = []
for schedule in schedules:
    if isinstance(schedule, Autodesk.Revit.DB.ViewSchedule):
        
        definit = schedule.Definition
        countParameters = definit.GetFieldCount() 
        # Parameter names
        index = None
        for i in range(countParameters):
            Parname = definit.GetField(i).ColumnHeading  # Parameter Column name
            for name in colName:
                if Parname == name:
                    index = i

            if index is not None:
                field = schedule.Definition.GetField(index)  # schedule field

                TransactionManager.Instance.EnsureInTransaction(doc)
                field.IsHidden = hide  # 1 = Hide, 0 = Show
                TransactionManager.Instance.TransactionTaskDone()
             
        results.append(schedule)
    else:
        results.append(None)

OUT = results

And put the IN[1] in the def U like this so that it can work for one or more columns.
image

Hi @Luffy11 Now it works, thank you so much! you are a great of help!

@kdelacruz11221004 , you’re welcome. I’m glad to help.

1 Like