Wie kann man Python beschleunigen, um Zellen für eine Excel -Tabelle bedingt hervorzuheben?
Posted: 14 Feb 2025, 07:02
Ich habe den folgenden Python -Code, der versucht, die Zeilen einer Excel -Tabelle bedingt auf den Werten der Spalten zu färben. Aufgrund der Anzahl der Zeilen ist die Laufzeit bei mehr als 30 Minuten sehr langsam. Ich frage mich, ob es Möglichkeiten gibt, so viel schneller zu machen. Danke. < /P>
Code: Select all
import openpyxl
from openpyxl.styles import PatternFill, Font
import time
import os
from concurrent.futures import ThreadPoolExecutor
# Create sample data
wb = openpyxl.Workbook()
ws = wb.active
# Add headers
headers = ["ID", "Type", "Value"]
for col, header in enumerate(headers, 1):
ws.cell(row=1, column=col, value=header)
# Add 100000 rows of sample data
for row in range(2, 100002):
ws.cell(row=row, column=1, value=row-1)
ws.cell(row=row, column=2, value="Type 1" if row % 3 == 0 else
"Type 2" if row % 3 == 1 else "Type 3")
ws.cell(row=row, column=3, value=f"Value {row-1}")
# Define fills
fills = {
"Type 1": PatternFill(start_color="FFF2CC", end_color="FFF2CC", fill_type="solid"),
"Type 2": PatternFill(start_color="DBEEF4", end_color="DBEEF4", fill_type="solid"),
"Type 3": PatternFill(start_color="FFC0CB", end_color="FFC0CB", fill_type="solid")
}
# Loop approach
start = time.perf_counter()
for row_idx in range(2, ws.max_row + 1):
category = ws.cell(row=row_idx, column=2).value
fill = fills.get(category)
if fill:
for cell in ws[row_idx]:
cell.fill = fill
cell.font = Font(bold=True)
print(f"Run time: {time.perf_counter() - start:.2f} seconds")
wb.save("output.xlsx")