Untitled

 avatar
unknown
plain_text
a month ago
2.3 kB
2
Indexable
import clr
import sys
from Autodesk.Revit.DB import *
from pyrevit import revit, DB, forms

# Add Excel interop
clr.AddReference("Microsoft.Office.Interop.Excel")
import Microsoft.Office.Interop.Excel as Excel

# Select Excel file
excel_path = forms.pick_file(file_ext='xlsx')
if not excel_path:
    forms.alert("No Excel file selected!")
    sys.exit()

# Open Excel
excel_app = Excel.ApplicationClass()
workbook = excel_app.Workbooks.Open(excel_path)
sheet = workbook.Sheets[1]

# Read Excel data
data = []
row = 1
while True:
    row_data = []
    col = 1
    while True:
        cell_value = sheet.Cells(row, col).Value
        if cell_value is None:
            break
        row_data.append(cell_value)
        col += 1
    if not row_data:
        break
    data.append(row_data)
    row += 1

# Close Excel
workbook.Close(False)
excel_app.Quit()

# Clean up
del excel_app

# Verify data
if not data or len(data) < 2:
    forms.alert("No valid data found in Excel!")
    sys.exit()

# First row is headers
headers = data[0]
values = data[1:]

# Get Revit Document
doc = revit.doc

# Transaction to create Key Schedule
t = Transaction(doc, "Create Key Schedule from Excel")
t.Start()

try:
    # Define category for the schedule (e.g., Walls)
    category = DB.Category.GetCategory(doc, DB.BuiltInCategory.OST_Walls)

    # Create a key schedule
    key_schedule = ViewSchedule.CreateKeySchedule(doc, category.Id)

    # Add fields (headers from Excel)
    schedule_definition = key_schedule.Definition
    for header in headers:
        schedule_field = schedule_definition.AddField(ScheduleFieldType.Instance, ElementId.InvalidElementId)
        schedule_field.SetName(header)

    # Add rows (values from Excel)
    for value_row in values:
        schedule_instance = key_schedule.InsertRow(ScheduleRowType.Data)
        for col_index, value in enumerate(value_row):
            schedule_field = schedule_definition.GetField(col_index)
            key_schedule.SetCellText(schedule_instance, schedule_field.FieldId, str(value))

    t.Commit()
    forms.alert("Key Schedule created successfully!")
except Exception as e:
    t.RollBack()
    forms.alert(f"Error: {e}")
Editor is loading...
Leave a Comment