如何避免在xlsxwriter(Python)中覆盖单元格样式?

时间:2017-03-13 09:36:30

标签: python excel xlsxwriter

我使用的是Python 2.7,xlsxwriter 0.8.4

我有一个值列表,intfloat s,我希望能够在将数据写入工作表的单元格时应用不同的数字格式。

但是,使用set_num_format方法时,最后应用的格式将应用于已写入的单元格。 我想知道是否可以单独为每个写入操作应用单元格格式?如果没有,那么如何管理多个格式对象,而无需硬编码,如下所示:

simple_style_percent_int = workbook.add_format({'bold': False, 'font_color': 'black','font_size': 11, 'font_name': 'Calibri','text_wrap': True, 'num_format': '0"%"'}) simple_style_percent_decimal = workbook.add_format({'bold': False, 'font_color': 'black','font_size': 11, 'font_name': 'Calibri','text_wrap': True, 'num_format': '0.0"%"'})

我运行的代码:

import xlsxwriter

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

percent_format = workbook.add_format()

for item in [22.0, 34.68]:

    if item.is_integer():
        percent_format.set_num_format('0"%"')
        worksheet.write(1,1, int(item), percent_format)
    else:
        percent_format.set_num_format('0.00"%"')
        worksheet.write(2,1, item, percent_format)

workbook.close()

该脚本将最后使用的(即十进制百分比)格式应用于在先前写入操作期间具有此格式的所有单元格(但是,我希望22表示为22%,而不是{ {1}}。

enter image description here

1 个答案:

答案 0 :(得分:4)

没有什么能阻止你定义多种格式如下:

import xlsxwriter

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

percent_format_1 = workbook.add_format()
percent_format_1.set_num_format('0"%"')

percent_format_2 = workbook.add_format()
percent_format_2.set_num_format('0.00"%"')

for item in [22.0, 34.68]:
    if item.is_integer():
        worksheet.write(1,1, int(item), percent_format_1)
    else:
        worksheet.write(2,1, item, percent_format_2)

workbook.close()

这会给你:

excel screenshot

注意,更改格式将导致更改应用于已使用该格式编写的单元格。即最终格式用于显示所有关联的单元格,这就是您看到它更改的原因。有关详细信息,请参阅Modifying formats

要使用这两种不同的格式将其应用于整列数据,您可以按以下方式枚举数据:

import xlsxwriter

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

percent_format_1 = workbook.add_format()
percent_format_1.set_num_format('0"%"')

percent_format_2 = workbook.add_format()
percent_format_2.set_num_format('0.00"%"')

for rowy, item in enumerate([22.0, 34.68, 1.0, 5.0, 6.8], start=1):
    if item.is_integer():
        worksheet.write(rowy, 1, int(item), percent_format_1)
    else:
        worksheet.write(rowy, 1, item, percent_format_2)

workbook.close()