根据 xlxswriter python 中的唯一行添加行颜色

问题描述 投票:0回答:1

我正在从 python python xlxswriter 包生成 xlxs 文件。我想根据组合唯一 id 生成带有颜色编码的行。请找到以下输出

当前逻辑:

fontcolor_indexlist = [data[0] for data in df_Index.select("index").filter(col("Invoice Calculation Date") == f'{InvoiceDate}').collect()]  #Getting index from pyspark dataframe

pandas_df = df_InvoiceDetails.drop("cellformat").toPandas()
 
writer = pd.ExcelWriter(f"/tmp/{DetailsFileName}", engine="xlsxwriter")

cell_format = workbook.add_format({'valign': 'vcenter', 'align': 'center','fg_color': '#D3D3D3'})

if row_num in fontcolor_indexlist:
   worksheet.write(row_num, col_num, value, cell_format)

我尝试了上面的代码,想用低代码实现xlxs文件,类似于条件格式化

python excel xlsxwriter
1个回答
0
投票

假设你想交替每个

"id"
/块的颜色,我会使用
groupby
/
write_row

# for convenience, i'm using df instead of pandas_df

D_FMT = {"valign": "vcenter", "align": "center"}
C_FMT = {"fg_color": "#D3D3D3"}
H_FMT = {"bold": 1}

SR, SC = 0, 0 # start row/col

with pd.ExcelWriter(f"/tmp/{DetailsFileName}", engine="xlsxwriter") as wr:
    wb = wr.book; ws = wb.add_worksheet("Sheet1")
    
    ws.write_row(SR, SC, df.columns, wb.add_format(H_FMT))

    for n, (_, g)in enumerate(df.groupby("id", sort=False)):
        for idx, row in zip(g.index, g.to_numpy()):
            _fmt = D_FMT if not n%2 else {**D_FMT, **C_FMT}
            ws.write_row(idx+1, SC, row, wb.add_format(_fmt))

© www.soinside.com 2019 - 2024. All rights reserved.