簡體   English   中英

嵌套循環中的XlsxWriter格式

[英]XlsxWriter formatting in nested loop

我已經嘗試過https://xlsxwriter.readthedocs.io/format.html上所有可以想象的組合以及任何我發現與之相關的Stack Overflow答案。

99.99%的機會很簡單,因為這些通常是我死胡同的原因。

我在第一張工作表中寫了一個摘要,並遍歷了df的字典以將多個df寫入單獨的工作表(這很好)

我可以將數字格式應用於摘要,但不能應用於循環。

writer = ExcelWriter('Players ' + str(date.datetime.now().strftime("%d-%m-%Y %H;%M;%S")) +'.xlsx', engine='xlsxwriter')
summary.to_excel(writer,'Summary',index=False)
workbook  = writer.book
worksheet = writer.sheets['Summary']
format1 = workbook.add_format({'num_format': '0.000'})
worksheet.set_column('A:A', 15)
worksheet.set_column('B:B', 15)
worksheet.set_column('C:C', 6, format1)
worksheet.set_column('D:D', 15)
worksheet.conditional_format('C2:C100', {'type': '3_color_scale',
                                         'min_color': "green",
                                         'mid_color': "yellow",
                                         'max_color': "red"})
#Above works
#below doesn't format

#loop through summary and players individual tables
#write an individual table to excel if score > 0
for index, row in summary.iterrows():
    for tbl in player_df_dict:
        if (row['Player_1'] == tbl[0]) & (row['Player_2'] == tbl[1]) & (row['Score']>0):
            player_df_dict[tbl].to_excel(writer,str(tbl[0])+" and "+str(tbl[1]),index=False, columns=cols)
            worksheet = writer.sheets[str(tbl[0])+" and "+str(tbl[1])]
            #format2 = workbook.add_format({'num_format': '0.000'})
            #worksheet.set_column('D:D', 20, format1)
            #worksheet.set_column('D:D', 20, format2)

writer.save()

我試過了:

  • 使用原始工作簿對象(來自摘要代碼)
  • 在每個循環內外的所有變化中實例化一個新的工作簿對象
  • 上面與工作表對象相同
  • 設置和應用格式都相同

您沒有完全提出mcve

我只能告訴您的是,設置列有效; 我也以兩種略有不同的方式(您+使用writer.sheets[tabname] ,即未為工作表創建顯式變量。

在下面的示例中,兩種情況都將應用格式設置。

另外,在循環之外定義格式-這是書的屬性,而不是圖紙的屬性。

下面的代碼創建一個隨機浮點數據框,將其導出到excel並格式化B和C列-請記住,Python的0列是A列)

import numpy as np
import pandas as pd

writer =pd.ExcelWriter('xlsx_test.xlsx')
format_1 = writer.book.add_format({'num_format': '0.000'})
for i in range(3):
    tabname = str(i)
    pd.DataFrame(np.random.rand(10,4) ).to_excel(writer, tabname)
    writer.sheets[tabname].set_column(1,2, None, format_1)

for i in ["a","b"]:
    tabname = i
    pd.DataFrame(np.random.rand(10,4) ).to_excel(writer, tabname)
    ws = writer.sheets[i]
    ws.set_column(1,2, None, format_1)

writer.close()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM