mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-23 14:26:30 +00:00
ifcfm cobie 2.4 - color code excel tabs
example - https://i.imgur.com/tSeqyjj.png
This commit is contained in:
@@ -271,19 +271,23 @@ class Writer:
|
|||||||
def write_xlsx(self, output: str) -> None:
|
def write_xlsx(self, output: str) -> None:
|
||||||
workbook = Workbook()
|
workbook = Workbook()
|
||||||
|
|
||||||
cell_formats = {}
|
cell_formats: dict[str, PatternFill] = {}
|
||||||
for key, value in self.config.get("colours", {}).items():
|
for key, value in self.config.get("colours", {}).items():
|
||||||
fill = PatternFill(start_color=value, end_color=value, fill_type="solid")
|
fill = PatternFill(start_color=value, end_color=value, fill_type="solid")
|
||||||
cell_formats[key] = fill
|
cell_formats[key] = fill
|
||||||
|
|
||||||
for category, data in self.categories.items():
|
for category, data in self.categories.items():
|
||||||
colours = self.config.get("categories", {}).get(category, {}).get("colours", [])
|
category_data = self.config.get("categories", {}).get(category, {})
|
||||||
|
colours = category_data.get("colours", ())
|
||||||
|
|
||||||
if category in workbook.sheetnames:
|
if category in workbook.sheetnames:
|
||||||
worksheet = workbook[category]
|
worksheet = workbook[category]
|
||||||
else:
|
else:
|
||||||
worksheet = workbook.create_sheet(category)
|
worksheet = workbook.create_sheet(category)
|
||||||
|
|
||||||
|
if category_colour := category_data.get("colour", None):
|
||||||
|
worksheet.sheet_properties.tabColor = cell_formats[category_colour].start_color.rgb
|
||||||
|
|
||||||
r = 1 # Openpyxl uses 1-based indexing
|
r = 1 # Openpyxl uses 1-based indexing
|
||||||
c = 1
|
c = 1
|
||||||
for header in data["headers"]:
|
for header in data["headers"]:
|
||||||
|
|||||||
@@ -1141,6 +1141,7 @@ config = {
|
|||||||
"bool_false": "No",
|
"bool_false": "No",
|
||||||
"categories": {
|
"categories": {
|
||||||
"Contact": {
|
"Contact": {
|
||||||
|
"colour": "r",
|
||||||
"keys": ["Email"],
|
"keys": ["Email"],
|
||||||
"headers": [
|
"headers": [
|
||||||
"Email",
|
"Email",
|
||||||
@@ -1169,6 +1170,7 @@ config = {
|
|||||||
"get_element_data": get_contact_data,
|
"get_element_data": get_contact_data,
|
||||||
},
|
},
|
||||||
"Facility": {
|
"Facility": {
|
||||||
|
"colour": "r",
|
||||||
"keys": ["Name"],
|
"keys": ["Name"],
|
||||||
"headers": [
|
"headers": [
|
||||||
"Name",
|
"Name",
|
||||||
@@ -1200,6 +1202,7 @@ config = {
|
|||||||
"get_element_data": get_facility_data,
|
"get_element_data": get_facility_data,
|
||||||
},
|
},
|
||||||
"Floor": {
|
"Floor": {
|
||||||
|
"colour": "r",
|
||||||
"keys": ["Name"],
|
"keys": ["Name"],
|
||||||
"headers": [
|
"headers": [
|
||||||
"Name",
|
"Name",
|
||||||
@@ -1219,6 +1222,7 @@ config = {
|
|||||||
"get_element_data": get_floor_data,
|
"get_element_data": get_floor_data,
|
||||||
},
|
},
|
||||||
"Space": {
|
"Space": {
|
||||||
|
"colour": "r",
|
||||||
"keys": ["Name"],
|
"keys": ["Name"],
|
||||||
"headers": [
|
"headers": [
|
||||||
"Name",
|
"Name",
|
||||||
@@ -1241,6 +1245,7 @@ config = {
|
|||||||
"get_element_data": get_space_data,
|
"get_element_data": get_space_data,
|
||||||
},
|
},
|
||||||
"Zone": {
|
"Zone": {
|
||||||
|
"colour": "o",
|
||||||
"keys": ["Name", "Category", "SpaceNames"],
|
"keys": ["Name", "Category", "SpaceNames"],
|
||||||
"headers": [
|
"headers": [
|
||||||
"Name",
|
"Name",
|
||||||
@@ -1259,6 +1264,7 @@ config = {
|
|||||||
"get_element_data": get_zone_data,
|
"get_element_data": get_zone_data,
|
||||||
},
|
},
|
||||||
"Type": {
|
"Type": {
|
||||||
|
"colour": "r",
|
||||||
"keys": ["Name"],
|
"keys": ["Name"],
|
||||||
"headers": [
|
"headers": [
|
||||||
"Name",
|
"Name",
|
||||||
@@ -1303,6 +1309,7 @@ config = {
|
|||||||
"get_element_data": get_type_data,
|
"get_element_data": get_type_data,
|
||||||
},
|
},
|
||||||
"Component": {
|
"Component": {
|
||||||
|
"colour": "r",
|
||||||
"keys": ["Name"],
|
"keys": ["Name"],
|
||||||
"headers": [
|
"headers": [
|
||||||
"Name",
|
"Name",
|
||||||
@@ -1331,6 +1338,7 @@ config = {
|
|||||||
"get_element_data": get_component_data,
|
"get_element_data": get_component_data,
|
||||||
},
|
},
|
||||||
"System": {
|
"System": {
|
||||||
|
"colour": "o",
|
||||||
"keys": ["Name", "Category", "ComponentNames"],
|
"keys": ["Name", "Category", "ComponentNames"],
|
||||||
"headers": [
|
"headers": [
|
||||||
"Name",
|
"Name",
|
||||||
@@ -1349,6 +1357,7 @@ config = {
|
|||||||
"get_element_data": get_system_data,
|
"get_element_data": get_system_data,
|
||||||
},
|
},
|
||||||
"Assembly": { # Note that this is technically "not required"
|
"Assembly": { # Note that this is technically "not required"
|
||||||
|
"colour": "o",
|
||||||
"keys": ["Name", "SheetName", "ParentName"],
|
"keys": ["Name", "SheetName", "ParentName"],
|
||||||
"headers": [
|
"headers": [
|
||||||
"Name",
|
"Name",
|
||||||
@@ -1369,6 +1378,7 @@ config = {
|
|||||||
"get_element_data": get_assembly_data,
|
"get_element_data": get_assembly_data,
|
||||||
},
|
},
|
||||||
"Connection": { # Note that this is technically "not required"
|
"Connection": { # Note that this is technically "not required"
|
||||||
|
"colour": "o",
|
||||||
"keys": ["Name", "ConnectionType", "RowName1", "RowName2"],
|
"keys": ["Name", "ConnectionType", "RowName1", "RowName2"],
|
||||||
"headers": [
|
"headers": [
|
||||||
"Name",
|
"Name",
|
||||||
@@ -1392,6 +1402,7 @@ config = {
|
|||||||
"get_element_data": get_connection_data,
|
"get_element_data": get_connection_data,
|
||||||
},
|
},
|
||||||
"Spare": {
|
"Spare": {
|
||||||
|
"colour": "r",
|
||||||
"keys": ["Name"],
|
"keys": ["Name"],
|
||||||
"headers": [
|
"headers": [
|
||||||
"Name",
|
"Name",
|
||||||
@@ -1413,6 +1424,7 @@ config = {
|
|||||||
"get_element_data": get_spare_data,
|
"get_element_data": get_spare_data,
|
||||||
},
|
},
|
||||||
"Resource": {
|
"Resource": {
|
||||||
|
"colour": "r",
|
||||||
"keys": ["Name"],
|
"keys": ["Name"],
|
||||||
"headers": [
|
"headers": [
|
||||||
"Name",
|
"Name",
|
||||||
@@ -1430,6 +1442,7 @@ config = {
|
|||||||
"get_element_data": get_resource_data,
|
"get_element_data": get_resource_data,
|
||||||
},
|
},
|
||||||
"Job": {
|
"Job": {
|
||||||
|
"colour": "r",
|
||||||
"keys": ["Name", "TypeName", "TaskNumber"],
|
"keys": ["Name", "TypeName", "TaskNumber"],
|
||||||
"headers": [
|
"headers": [
|
||||||
"Name",
|
"Name",
|
||||||
@@ -1458,6 +1471,7 @@ config = {
|
|||||||
"get_element_data": get_job_data,
|
"get_element_data": get_job_data,
|
||||||
},
|
},
|
||||||
"Document": {
|
"Document": {
|
||||||
|
"colour": "r",
|
||||||
"keys": ["Name", "Stage", "SheetName", "RowName"],
|
"keys": ["Name", "Stage", "SheetName", "RowName"],
|
||||||
"headers": [
|
"headers": [
|
||||||
"Name",
|
"Name",
|
||||||
@@ -1482,6 +1496,7 @@ config = {
|
|||||||
"get_element_data": get_document_data,
|
"get_element_data": get_document_data,
|
||||||
},
|
},
|
||||||
"Attribute": {
|
"Attribute": {
|
||||||
|
"colour": "o",
|
||||||
"keys": ["Name", "SheetName", "RowName"],
|
"keys": ["Name", "SheetName", "RowName"],
|
||||||
"headers": [
|
"headers": [
|
||||||
"Name",
|
"Name",
|
||||||
@@ -1504,6 +1519,7 @@ config = {
|
|||||||
"get_element_data": pass_category_elements_as_data,
|
"get_element_data": pass_category_elements_as_data,
|
||||||
},
|
},
|
||||||
"Coordinate": {
|
"Coordinate": {
|
||||||
|
"colour": "o",
|
||||||
"keys": ["Name", "SheetName", "RowName"],
|
"keys": ["Name", "SheetName", "RowName"],
|
||||||
"headers": (
|
"headers": (
|
||||||
"Name",
|
"Name",
|
||||||
|
|||||||
Reference in New Issue
Block a user