如何使用xlsxwriter“动态”向现有格式对象添加格式

问题描述 投票:2回答:2

是否可以在xlsxwriter中“动态”修改或添加现有格式?我想要这个功能,所以我可以保持一些主要格式并根据具体情况添加新标准。

例如,在下面的代码中,我想将下划线格式添加到单元格A2中的dark_blue_header_format。但是,这会产生一些意想不到的结果,如下图所示。我希望A1和A3是蓝色的24尺寸白色文字:我希望A2是蓝色的24尺寸白色文字和下划线。

import xlsxwriter

workbook = xlsxwriter.Workbook('demo.xlsx')
worksheet = workbook.add_worksheet()

dark_blue_header_format = workbook.add_format({
    'bg_color': '#5081BB',
    'font_color': '#FFFFFF',
    'font_size': 24
})

worksheet.set_column('A:A', 30)

worksheet.write('A1', 'Company Name', dark_blue_header_format)
worksheet.write('A2', 'Underlined Company Name', dark_blue_header_format.set_underline())
worksheet.write('A3', 'Company Name', dark_blue_header_format)

workbook.close()

我查看了formatting docs,我还没有发现任何可以动态添加格式的内容。如果set_whatever功能的行为与此示例类似,那么我不明白它对什么有用。

如果无法“动态”向现有格式添加格式,那么构建许多独特格式时的最佳做法是什么?

谢谢!

python xlsxwriter
2个回答
3
投票

是否可以在xlsxwriter中“动态”修改或添加现有格式?

目前没有。

来自docs

XlsxWriter电子表格中的每个唯一单元格格式都必须具有相应的Format对象。无法使用带有write()方法的Format,然后重新定义它以便在以后使用。这是因为格式应用于不处于其当前状态但处于其最终状态的单元。请考虑以下示例:

format = workbook.add_format({'bold': True, 'font_color': 'red'})
worksheet.write('A1', 'Cell A1', format)

# Later...
format.set_font_color('green')
worksheet.write('B1', 'Cell B1', format)

为单元格A1分配一种格式,该格式最初的字体设置为红色。但是,颜色随后设置为绿色。当Excel显示单元格A1时,它将显示格式的最终​​状态,在这种情况下将为绿色。

在将来可能合并和修改格式时,这可能会在某个阶段发生变化。有一个开放的feature request将涵盖这将是separating data and formats周围更大的修改的一部分。

与此同时,构建许多独特格式时的最佳实践是将格式存储在由其属性索引的字典中。


2
投票

你可以这样做:

def copy_format(book, fmt):
    properties = [f[4:] for f in dir(fmt) if f[0:4] == 'set_']
    dft_fmt = book.add_format()
    return book.add_format({k : v for k, v in fmt.__dict__.items() if k in properties and dft_fmt.__dict__[k] != v})

workbook = xlsxwriter.Workbook('Test.xlsx')
worksheet = workbook.add_worksheet()

initial_format = workbook.add_format({
    'font_size': 13,
    'bold': 1,
    'border': 1,
    'align': 'center',
})

new_format = copy_format(workbook, initial_format)
new_format.set_font_size(16)
new_format.set_font_color('white')
© www.soinside.com 2019 - 2024. All rights reserved.