# Archi-lab.net in Revit 2026

**URL:** <https://forum.dynamobim.com/t/archi-lab-net-in-revit-2026/114929>\
**Category:** Revit\
**Created:** [July 14, 2026, 12:26am UTC](https://forum.dynamobim.com/t/archi-lab-net-in-revit-2026/114929 "2026-07-14T00:26:13Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![henryrys](https://avatars.discourse-cdn.com/v4/letter/h/8e7dd6/32.png) [@henryrys](https://forum.dynamobim.com/u/henryrys)\
**Post date:** [July 14, 2026, 12:26am UTC](https://forum.dynamobim.com/t/archi-lab-net-in-revit-2026/114929/1 "2026-07-14T00:26:13Z")

</div>

Hi everyone,

We are trying to use a simple Dynamo script to import data from Excel to a key schedule for the door hardware schedule in Revit 2026 with Dynamo v.3.6.1. As you can see in the Image 1, the data can be read from the Excel but cannot be imported to the schedule w/ the node **Key Schedule** under [Archi-lab.net](http://Archi-lab.net). I did ask the Gemini to diagnose the script that used to work in Revit 2023, and it suggested me to install the [Archi-lab.net](http://Archi-lab.net) version corresponding to **Revit 2026 / Dynamo 3.x**.

 ![image](https://us1.discourse-cdn.com/flex022/uploads/dynamobim/original/3X/d/8/d82d8da55acc47a7d049dd116a16f75c53bdda80.png)

But in the Dyanomo package manager, the latest version does not support Revit 2026 as shown in Image 2. We tested the script in Revit 2023, and it worked successfully. Since the [Archi-lab.net](http://Archi-lab.net) package is widely used, I’m looking for support to fix this version issue. Is it related to the IronPython2 or 3? Thank you!

 ![image](https://us1.discourse-cdn.com/flex022/uploads/dynamobim/original/3X/b/0/b06347dce2ee419cdb545ddf619458c960819e58.png)

---

<div class="post-metadata">

**Author:** ![Mike.Buttery](https://avatars.discourse-cdn.com/v4/letter/m/b19c9b/32.png) [@Mike.Buttery](https://forum.dynamobim.com/u/Mike.Buttery)\
**Post date:** [July 15, 2026, 3:04am UTC](https://forum.dynamobim.com/t/archi-lab-net-in-revit-2026/114929/2 "2026-07-15T03:04:21Z")

</div>

The archilab key schedule node has been deprecated as far as I know  
I have looked at Konrad’s original code and done a version  
Please note - this will **overwrite** the key schedule

 ![image](https://us1.discourse-cdn.com/flex022/uploads/dynamobim/original/3X/c/a/ca36809e00c850684f7d49b8e0b4e1e58de633e1.png)

```python
import clr

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

clr.AddReference("RevitAPI")
from Autodesk.Revit.DB import FilteredElementCollector, SectionType, StorageType

doc = DocumentManager.Instance.CurrentDBDocument

key_schedule = UnwrapElement(IN[0])
fields = IN[1]
data = IN[2]

# Checks
assert hasattr(key_schedule, "Definition") and key_schedule.Definition.IsKeySchedule, (
    "Schedule View is not a key schedule"
)
assert all(isinstance(item, list) for item in data), "Data must be a list of lists"
assert all(len(item) == len(fields) for item in data), (
    "All rows in data must have the same number of elements as fields"
)

# Conform table to the number of rows in the data
row_count = len(data)

table_data = key_schedule.GetTableData()
section_data = table_data.GetSectionData(SectionType.Body)
number_of_rows = section_data.NumberOfRows - 2 # Exclude header and title rows

TransactionManager.Instance.EnsureInTransaction(doc)

if number_of_rows < row_count:
    for _ in range(number_of_rows, row_count):
        section_data.InsertRow(0)

elif number_of_rows > row_count:
    for i in range(number_of_rows, row_count, -1):
        section_data.RemoveRow(i - 1)

row_elements = sorted(
    FilteredElementCollector(doc, key_schedule.Id), key=lambda x: int(x.Name)
)

for row, values in zip(row_elements, data):
    for field, value in zip(fields, values):
        field_param = row.LookupParameter(field)
        if field_param and field_param.StorageType == StorageType.String: # String
            field_param.Set(value.replace("\n", "\r\n"))
        elif field_param: # Numeric
            field_param.Set(value)

TransactionManager.Instance.TransactionTaskDone()

OUT = key_schedule

```

---

<div class="post-metadata">

**Author:** ![henryrys](https://avatars.discourse-cdn.com/v4/letter/h/8e7dd6/32.png) [@henryrys](https://forum.dynamobim.com/u/henryrys)\
**Post date:** [July 15, 2026, 8:10pm UTC](https://forum.dynamobim.com/t/archi-lab-net-in-revit-2026/114929/3 "2026-07-15T20:10:00Z")

</div>

Hi Mike, thank you so much for your support! May I know if you still have the [Archi-lab.net](http://Archi-lab.net) package installed in your Dynamo? The node **Data.OpenXMLImportExcel** worked only after I uninstalled the package. How can we fix this issue? Thanks again!

---

<div class="post-metadata">

**Author:** ![henryrys](https://avatars.discourse-cdn.com/v4/letter/h/8e7dd6/32.png) [@henryrys](https://forum.dynamobim.com/u/henryrys)\
**Post date:** [July 15, 2026, 9:11pm UTC](https://forum.dynamobim.com/t/archi-lab-net-in-revit-2026/114929/4 "2026-07-15T21:11:16Z")

</div>

Hi Mike, here is the update. I did paste your code into Python script, and I got an error warning saying “AttributeError : ‘NoneType’ object has no attribute ‘replace’ [’ File “”, line 52, in \n’]?”. I uploaded the whole dynamo script & the warning to Gemini & Calude for diagnosis, but the code they suggested to add to fix did not work…

---

<div class="post-metadata">

**Author:** ![Mike.Buttery](https://avatars.discourse-cdn.com/v4/letter/m/b19c9b/32.png) [@Mike.Buttery](https://forum.dynamobim.com/u/Mike.Buttery)\
**Post date:** [July 16, 2026, 12:08am UTC](https://forum.dynamobim.com/t/archi-lab-net-in-revit-2026/114929/5 "2026-07-16T00:08:12Z")

</div>

Your spreadsheet has blank cells  
Update the code like this

```auto
for row, values in zip(row_elements, data):
    for field, value in zip(fields, values):
        field_param = row.LookupParameter(field)
        if field_param and field_param.StorageType == StorageType.String: # String
            if not isinstance(value, str):
                value = ""
            field_param.Set(value.replace("\n", "\r\n"))
        elif field_param: # Numeric
            field_param.Set(value)

```

---

<div class="post-metadata">

**Author:** ![lashaw13](https://avatars.discourse-cdn.com/v4/letter/l/cc9497/32.png) [@lashaw13](https://forum.dynamobim.com/u/lashaw13)\
**Post date:** [September 4, 2026, 1:42pm UTC](https://forum.dynamobim.com/t/archi-lab-net-in-revit-2026/114929/6 "2026-09-04T13:42:15Z")

</div>

I have just come upon the fact that the Key Schedule node is no longer a part of [archi-lab](https://forum.dynamobim.com/t/archi-lab-net-updated-for-revit-2025-2027/115025/2) for revit 2026. I tried the python code above and it did not work. Are there other nodes that i can use to create the key schedule? Attached is a photo of my script…

 ![Create Door Key Schedule_2026-09-04_09-41-15](https://us1.discourse-cdn.com/flex022/uploads/dynamobim/original/3X/9/0/90311a60ff643cfcd0912e80001254fd534eca27.png)

---

<div class="post-metadata">

**Author:** ![john\_pierson](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.dynamobim.com/john_pierson/32/191977_2.png) [@john\_pierson](https://forum.dynamobim.com/u/john_pierson)\
**Post date:** [September 4, 2026, 3:42pm UTC](https://forum.dynamobim.com/t/archi-lab-net-in-revit-2026/114929/7 "2026-09-04T15:42:48Z")

</div>

Just wanted to chime in regarding archilab support and versioning:

> [@Archi-lab.net updated for Revit 2025-2027](https://forum.dynamobim.com/t/archi-lab-net-updated-for-revit-2025-2027/115025):
>
> Hey everyone, [archi-lab.net](http://archi-lab.net) has been updated on the Package Manager. It now supports Revit 2025, 2026 and 2027. Revit 2017-2024 are no longer supported, so if you’re on an older version, stick with what you have installed. A couple of fixes worth knowing about: Node tooltips are back. Released builds hadn’t been shipping the documentation file, so nodes showed up with no descriptions. The Excel export conflict is fixed. If you ever had to uninstall [archi-lab](https://forum.dynamobim.com/t/revit-2022-dynamo-2-10-package-not-showing-up-and-icons-missing/62933/7?) to get the out-of-the-box Data.Op…

---

<div class="post-metadata">

**Author:** ![Mike.Buttery](https://avatars.discourse-cdn.com/v4/letter/m/b19c9b/32.png) [@Mike.Buttery](https://forum.dynamobim.com/u/Mike.Buttery)\
**Post date:** [September 7, 2026, 12:22am UTC](https://forum.dynamobim.com/t/archi-lab-net-in-revit-2026/114929/8 "2026-09-07T00:22:00Z")

</div>

You haven’t provided a value for the `_upperCase` input. Assume this is `true/false`? It’s a bit hard to see how the data is meshing without pinned dropdowns
