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

我在Python 2.7 ,xlsxwriter 0.8.4

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

但是,使用set_num_format方法时,最后应用的格式将应用于已经写入的单元格。 我想知道是否可以单独为每个写入操作应用单元格格式? 如果不是,那么如何pipe理多个格式化对象,而不用像以下那样进行硬编码

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% ,而不是22.00%

在这里输入图像说明

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

 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截图

请注意,更改格式将导致将更改应用于已使用该格式写入的单元格。 即最终的格式是用来显示所有关联的单元格,这就是为什么你看到它的变化。 有关更多信息,请参阅修改格式 。


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

 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()