是否可以在 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()
Run Code Online (Sandbox Code Playgroud)

我浏览了格式化文档,但没有发现任何可以动态添加格式的内容。如果set_whatever功能表现得像这个例子,那么我不明白它有什么用处。
如果无法“即时”向现有格式添加格式,那么构建许多独特格式时的最佳做法是什么?
谢谢!
小智 9
你可以这样做:
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')
Run Code Online (Sandbox Code Playgroud)
是否可以在 xlsxwriter 中“即时”修改或添加现有格式?
目前没有。
从文档:
XlsxWriter 电子表格中的每个唯一单元格格式都必须有一个对应的 Format 对象。不可能将 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)
Run Code Online (Sandbox Code Playgroud)
单元格 A1 被分配了一种格式,该格式最初将字体设置为红色。但是,颜色随后被设置为绿色。当 Excel 显示单元格 A1 时,它将显示格式的最终状态,在这种情况下将是绿色。
构建许多独特格式时最实用的解决方法是将格式存储在由其属性索引的字典中。