Untitled
unknown
plain_text
a year ago
2.3 kB
9
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