ifcfm cobie 2.4 - color code excel tabs

example - https://i.imgur.com/tSeqyjj.png
This commit is contained in:
Andrej730
2025-01-13 17:48:50 +05:00
parent b7c18221f4
commit ac315e8a55
2 changed files with 22 additions and 2 deletions
+6 -2
View File
@@ -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"]:
+16
View File
@@ -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",