【问题标题】:How to avoid overwriting of cell style format in xlsxwriter (Python)?如何避免在 xlsxwriter(Python)中覆盖单元格样式格式?
【发布时间】:2017-03-13 09:36:30
【问题描述】:

我在 Python 2.7,xlsxwriter 0.8.4。

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

但是,当使用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%。

【问题讨论】:

    标签: python excel xlsxwriter


    【解决方案1】:

    没有什么能阻止您定义多种格式,如下所示:

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

    【讨论】:

    • 谢谢,马丁。这对我有用。您将如何处理我在问题中提到的关于拥有多种格式(没有对所有内容进行硬编码)的情况?我想拥有percent_format_1 和percent_format_2 格式意味着它们中的每一个都应该有自己的参数定义。任何生产力提示?希望有某种具有样板参数的超类,例如字体大小、字体类型等。
    • 我认为 xlsxwriter 不可能采用这种方法。您可以将单一格式应用于整行或整列,但您需要在每个单元格的基础上手动应用它。
    • 非常感谢。可惜我不知道有一种方法可以在不实际创建新样式的情况下将标准样式应用于多种样式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-23
    • 1970-01-01
    相关资源
    最近更新 更多