Cómo Extraer Propiedades y Mediciones de IFC a Excel con Python
En la coordinación y gestión de proyectos bajo estándares OpenBIM, el formato IFC (Industry Foundation Classes) se consolida como el vehículo universal para el intercambio de información entre diferentes disciplinas y plataformas (Revit, Archicad, Tekla, Allplan, FreeCAD). Sin embargo, cuando los responsables de costos, presupuestos o aseguramiento de calidad intentan exportar los datos contenidos en el modelo IFC a hojas de cálculo convencionales, frecuentemente se enfrentan a un problema frustrante: las herramientas comerciales básicas exportan tablas planas incompletas donde faltan los parámetros constructivos críticos, los códigos de clasificación y las cantidades base de obra (Base Quantities).
La causa de este inconveniente radica en la propia arquitectura del esquema IFC: la información no se encuentra asociada como atributos planos, sino estructurada mediante relaciones semánticas complejas denominadas conjuntos de propiedades (Property Sets o Psets) y conjuntos de cantidades (Quantity Sets o Qto). En esta guía técnica aprenderás cómo utilizar Python y la biblioteca de código abierto IfcOpenShell para extraer de forma exhaustiva, estructurada y automatizada cualquier propiedad y medición hacia Microsoft Excel.
Anatomía Semántica del Estándar IFC: Psets vs QTOs
Para extraer información con precisión matemática, es fundamental distinguir los dos tipos de contenedores de datos que conviven en cualquier entidad constructiva (como un IfcWall o una IfcColumn):
- Property Sets (Psets): Contienen metadatos alfanuméricos, parámetros descriptivos y criterios normativos (por ejemplo,
Pset_WallCommon.LoadBearingpara saber si es muro de carga, oPset_WallCommon.FireRatingpara resistencia al fuego). - Quantity Sets (Qto): Almacenan mediciones métricas exactas calculadas por el software de autoría bajo el estándar de BuildingSMART (por ejemplo,
Qto_WallBaseQuantities.NetSideAreapara área neta de tarrajeo, oQto_WallBaseQuantities.NetVolumepara volumen de concreto).
Script Python Completo: Extractor Universal de Psets y QTOs a Excel / CSV
El siguiente código utiliza el submódulo oficial ifcopenshell.util.element para acceder a todas las propiedades y cantidades asociadas a cada elemento constructivo, volcándolas en una matriz organizada lista para análisis en Excel.
"""
Extractor Universal de Propiedades (Psets) y Mediciones (QTO) de IFC a Excel / CSV.
Utiliza IfcOpenShell para consultar relaciones semanticas complejas.
Requiere: pip install ifcopenshell
"""
import os
import sys
import csv
def extraer_datos_ifc_a_tabla(ruta_ifc="modelo_edificio.ifc", archivo_salida="propiedades_ifc_exportadas.csv"):
"""Extrae atributos, psets y cantidades de elementos constructivos a un archivo CSV."""
print(f"--- Procesando archivo IFC: {ruta_ifc} ---")
registros = []
encabezados = [
"GlobalId",
"Tipo_IFC",
"Nombre",
"Nivel_Piso",
"Es_Carga",
"Longitud_m",
"Area_Neta_m2",
"Volumen_Neto_m3",
]
if not os.path.exists(ruta_ifc):
print(f"[INFO] Archivo '{ruta_ifc}' no encontrado en ruta local. Generando datos demostrativos.")
registros = [
["2X4aBc123D", "IfcWall", "Muro Exterior 20cm", "Piso 1", "True", 6.00, 16.80, 3.36],
["2X4aBc124E", "IfcWall", "Tabique Drywall 10cm", "Piso 1", "False", 4.50, 12.60, 1.26],
["3Y5bCd225F", "IfcColumn", "Columna Circular C-1", "Piso 1", "True", 0.50, 4.71, 0.59],
["4Z6cDe326G", "IfcSlab", "Losa Maciza E=15cm", "Piso 1", "True", 12.00, 72.00, 10.80],
["5A7dEf427H", "IfcBeam", "Viga Peraltada VP-1", "Piso 1", "True", 6.00, 7.20, 0.90],
]
else:
try:
import ifcopenshell
import ifcopenshell.util.element as elem_util
modelo = ifcopenshell.open(ruta_ifc)
# Clases constructivas clave a inspeccionar
clases = ["IfcWall", "IfcColumn", "IfcBeam", "IfcSlab"]
for clase in clases:
elementos = modelo.by_type(clase)
for el in elementos:
guid = el.GlobalId
nombre = getattr(el, "Name", "Sin Nombre")
# Nivel espacial
nivel_obj = elem_util.get_container(el)
nivel = nivel_obj.Name if nivel_obj else "General"
# Obtener todos los Psets y QTOs como diccionarios limpios
psets = elem_util.get_psets(el)
# Extraer propiedades comunes
es_carga = "N/A"
for pset_name, props in psets.items():
if "Common" in pset_name and "LoadBearing" in props:
es_carga = str(props["LoadBearing"])
break
# Extraer cantidades base
longitud = 0.0
area = 0.0
volumen = 0.0
for qto_name, quantities in psets.items():
if "Quantity" in qto_name or "BaseQuantities" in qto_name:
longitud = quantities.get("Length", quantities.get("GrossFootprintArea", 0.0))
area = quantities.get("NetSideArea", quantities.get("NetArea", quantities.get("GrossSideArea", 0.0)))
volumen = quantities.get("NetVolume", quantities.get("GrossVolume", 0.0))
registros.append([
guid,
clase,
nombre,
nivel,
es_carga,
round(float(longitud), 2) if isinstance(longitud, (int, float)) else 0.0,
round(float(area), 2) if isinstance(area, (int, float)) else 0.0,
round(float(volumen), 2) if isinstance(volumen, (int, float)) else 0.0,
])
except Exception as e:
print(f"[ERROR] Error al procesar modelo IFC: {e}")
return None
# Guardar en archivo CSV estructurado
with open(archivo_salida, "w", newline="", encoding="utf-8-sig") as f:
escritor = csv.writer(f, delimiter=";")
escritor.writerow(["REPORTE DE PROPIEDADES Y MEDICIONES IFC - OPENBIM"])
escritor.writerow([])
escritor.writerow(encabezados)
escritor.writerows(registros)
print(f"[OK] Archivo exportado exitosamente: {archivo_salida}")
print(f" Total de elementos analizados: {len(registros)}")
return archivo_salida
if __name__ == "__main__":
extraer_datos_ifc_a_tabla()
Cómo Procesar el Archivo en Excel para Presupuestos
- Importación con Codificación UTF-8: Abre Excel, ve a
Datos -> Obtener datos -> Desde archivo de texto/CSVy selecciona delimitador punto y coma (;). - Tablas Dinámicas por Categoría: Inserta una tabla dinámica seleccionando el campo
Tipo_IFCen filas y la suma deVolumen_Neto_m3yArea_Neta_m2en valores. - Filtro Estructural por Condición de Carga: Utiliza la columna
Es_Cargapara segregar muros portantes de tabiques de separación interior para cotización diferenciada.
🏛️ Únete al Ecosistema Maestro BIM
Accede a mi repositorio personal de ingeniería OpenBIM. Obtén de inmediato todos los manuales y archivos base (.FCStd y Blender) de Vivienda, Estructuras, Sketcher y Python. Tu acceso es vitalicio e incluye todas las futuras actualizaciones (como Instalaciones y Macros) sin costo adicional.
Asegura tu entrada hoy antes de la próxima subida por actualización de contenidos.
Preguntas Frecuentes (FAQ)
¿Qué función de IfcOpenShell permite extraer todas las propiedades de un elemento?
▼
¿Por qué algunas mediciones en archivos IFC aparecen con valor cero en Excel?
▼
¿Funciona este método con esquemas IFC2x3 e IFC4 indistintamente?
▼