簡體   English   中英

xlsxwriter + Python循環進行格式化

[英]xlsxwriter + Python looping over block for formatting

因此,我嘗試創建電子表格(.xlsx),以使一些布朗尼蛋糕起作用。 我沒有太多使用python,但是正在慢慢地使用它。

我想問一個關於代碼中特定部分的問題...

在下面的幾篇文章中,我將以下信息放入電子表格的單元格中。 這就像一種魅力,但是當我使用xlsxwriter用“粗體”或“下划線”格式化某些單元格時,我很茫然。

# This is the template of the xlsx file
worksheet2.write('A2', 'Scan Creation Date:')
worksheet2.write('A3', 'Total Hosts Scanned:')
worksheet2.write('A5', 'OVERALL FIGURES')
worksheet2.write('A6', 'Total Sev 5:')
worksheet2.write('A7', 'Total Sev 4:')
worksheet2.write('A8', 'Total Sev 3:')
worksheet2.write('A9', 'Total Sev 2:')
worksheet2.write('A10', 'Total Sev 1:')
worksheet2.write('A11', 'Overall Total:')
worksheet2.write('A13', 'Hostname')
worksheet2.write('B13', 'IP Address')
worksheet2.write('C13', 'Sev 5')
worksheet2.write('D13', 'Sev 4')
worksheet2.write('E13', 'Sev 3')
worksheet2.write('F13', 'Sev 2')
worksheet2.write('G13', 'Sev 1')
worksheet2.write('H13', 'Total')
worksheet2.write('I13', 'Stats (%)')

我想做的是一遍又一遍地重用上面的內容,但是用粗體或下划線或我需要做的使它在代碼中看起來很漂亮的附加到每一行。

# This is the template of the xlsx file
worksheet2.write('A2', 'Scan Creation Date:', bold)
worksheet2.write('A3', 'Total Hosts Scanned:', bold)
worksheet2.write('A5', 'OVERALL FIGURES', bold)
worksheet2.write('A6', 'Total Sev 5:', bold)
worksheet2.write('A7', 'Total Sev 4:')
worksheet2.write('A8', 'Total Sev 3:')
worksheet2.write('A9', 'Total Sev 2:')
worksheet2.write('A10', 'Total Sev 1:')
worksheet2.write('A11', 'Overall Total:', bold)
worksheet2.write('A13', 'Hostname', bold)
worksheet2.write('B13', 'IP Address')
worksheet2.write('C13', 'Sev 5', bold)
worksheet2.write('D13', 'Sev 4')
worksheet2.write('E13', 'Sev 3')
worksheet2.write('F13', 'Sev 2')
worksheet2.write('G13', 'Sev 1')
worksheet2.write('H13', 'Total')
worksheet2.write('I13', 'Stats (%)', bold)

    # This is the template of the xlsx file
worksheet2.write('A2', 'Scan Creation Date:', underline)
worksheet2.write('A3', 'Total Hosts Scanned:')
worksheet2.write('A5', 'OVERALL FIGURES', underline)
worksheet2.write('A6', 'Total Sev 5:')
worksheet2.write('A7', 'Total Sev 4:')
worksheet2.write('A8', 'Total Sev 3:')
worksheet2.write('A9', 'Total Sev 2:')
worksheet2.write('A10', 'Total Sev 1:')
worksheet2.write('A11', 'Overall Total:', underline)
worksheet2.write('A13', 'Hostname')
worksheet2.write('B13', 'IP Address')
worksheet2.write('C13', 'Sev 5')
worksheet2.write('D13', 'Sev 4')
worksheet2.write('E13', 'Sev 3')
worksheet2.write('F13', 'Sev 2')
worksheet2.write('G13', 'Sev 1')
worksheet2.write('H13', 'Total')
worksheet2.write('I13', 'Stats (%)')

因此,基本上我可以遍歷每一個,並指定需要特殊格式的內容。

我也忘了提到我曾嘗試使用zip來將它們列出來,然后嘗試將所需的內容添加到它產生的每個元素中,但是后來我看到它以“元組”的形式出現,所以我無法追加到這些元素中。

一種實現方法是創建一個DataFrame,其中包含要在不同列中使用的所有不同類型的格式。 然后,您可以使用pandas.DataFrame.iterrows()遍歷特定的列。

我在下面提供了一個示例,該示例使用一個用戶定義的函數,並帶有一個基於要從數據幀中使用的格式列的參數。

import xlsxwriter
import pandas as pd

df = pd.DataFrame({
"cell": ['A2', 'A3', 'A5', 'A6', 'A7'], 
"name": ['Scan Creation Date:', 'Total Hosts Scanned:', 
'OVERALL FIGURES', 'Total Sev 5:', 'Total Sev 5:'],
"format1": ['bold', 'none', 'bold', 'none', 'bold'],
"format2": ['underline', 'none', 'underline', 'none', 'none'],
"format3": ['underline', 'bold', 'underline', 'none', 'bold']
})

workbook   = xlsxwriter.Workbook('test.xlsx')

none = workbook.add_format({})
bold = workbook.add_format({'bold': True,})
underline = workbook.add_format({'underline': True,})

def make_sheets(format_col):
    ws = workbook.add_worksheet()
    for i, row in df.iterrows():
        if df[''+ format_col +''].ix[i] == 'bold':
            format = bold
        elif df[''+ format_col +''].ix[i] == 'underline':
            format = underline
        else:
            format = none
        ws.write('%s' % (df['cell'].ix[i]), '%s' % (df['name'].ix[i]), 
format)

make_sheets("format1")
make_sheets("format2")
make_sheets("format3")

workbook.close()

輸出:

預期產量

暫無
暫無

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

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