如何避免在 xlsxwriter (Python) 中覆盖单元格样式格式?
How to avoid overwriting of cell style format in xlsxwriter (Python)?
我在 Python 2.7
, xlsxwriter 0.8.4
.
我有一个值列表,int
s 和 float
s,我希望在将数据写入 sheet 的单元格时能够应用不同的数字格式.
但是,当使用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%
,而不是作为 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()
这会给你:
请注意,更改格式会导致更改应用于已使用该格式编写的单元格。即最终格式用于显示所有关联的单元格,这就是您看到它发生变化的原因。有关详细信息,请参阅 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()
我在 Python 2.7
, xlsxwriter 0.8.4
.
我有一个值列表,int
s 和 float
s,我希望在将数据写入 sheet 的单元格时能够应用不同的数字格式.
但是,当使用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%
,而不是作为 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()
这会给你:
请注意,更改格式会导致更改应用于已使用该格式编写的单元格。即最终格式用于显示所有关联的单元格,这就是您看到它发生变化的原因。有关详细信息,请参阅 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()