【问题标题】:Fastest Method to Format最快的格式化方法
【发布时间】:2017-08-06 02:40:34
【问题描述】:

我有一个 Python 2.7 脚本,它可以转换各种数据并通过 OpenPyXL 2.4.5 将其输出到 XLSX。目前我正在遍历所有单元格,我使用“max_row”和“max_column”缩小了范围。这对我来说似乎不是很快或效率很高。设置以下内容的最快方法是什么?如果您能提出一般方法,我将不胜感激。下面的粗略基准测试适用于具有 16 GB RAM 和 Intel i7-3740QM@2.69 GHz 的 Windows 7 SP1 x64。

  • 边框(格式化 35880 个单元格需要 40 秒。)
  • 字体和对齐方式(格式化 35880 个单元格需要 42 秒。)
  • 着色(格式化 35880 个单元格需要 28 秒。)
  • 隐藏未使用的行/列(隐藏 16,380 列 x 1,039,606 行需要很长时间。仅隐藏列需要 0.2 秒。)

下面是迭代方法。

def format_xlsx(csv_list, ws_to_format):
    """ Use OpenPyXL to format a XLSX. """
    process_start = timer()
    for row in csv_list:
        count = count + 1
        ws_to_format.append(row)
    row_count = ws_to_format.max_row
    column_count = ws_to_format.max_column
    for y_axis in range(1, column_count+1):
        for x_axis in range(1, row_count+1):
            ws_to_format = xlsx_borders(ws_to_format, x_axis, y_axis)
            ws_to_format = xlsx_shading(ws_to_format, x_axis, y_axis)
            ws_to_format = xlsx_font_and_alignment(ws_to_format, x_axis, y_axis)
    ws_to_format = xlsx_hide_unused_colrow(ws_to_format)
    return

以下是隐藏未使用的行/列的方法。

def xlsx_hide_unused_colrow(ws_to_format):
    row_count = ws_to_format.max_row
    column_count = ws_to_format.max_column
    start_range = column_number_to_letter(column_count+2)
    end_range = column_number_to_letter(16384)
    ws_to_format.column_dimensions.group(start_range, end_range, hidden=True)
    start_range = row_count+2
    for y in xrange(start_range, 1048577):
        ws_to_format.row_dimensions[y].hidden=True

【问题讨论】:

    标签: python-2.7 openpyxl


    【解决方案1】:

    您不应该在循环中调用ws.max_rowws.max_column,因为它们是在每次调用时计算的。由于工作表的大小在您工作期间不会发生变化,因此只需调用一次即可。

    此外,将样式应用于行和列维度可能无法达到您的预期效果,请参阅相关文档。您需要将样式应用于相关行和列中的单元格。如果要格式化很多单元格,请使用命名样式。

    【讨论】:

    • -感谢您的指点。我是 Python 的新手,如果这个问题很愚蠢,请原谅这个问题,但我没有在 for 循环之外指定“max_row”/“max_column”吗?
    • 您在嵌套函数中调用 max_column 并在 for 循环中调用此函数。
    猜你喜欢
    • 2015-07-27
    • 1970-01-01
    • 2011-11-13
    • 2019-02-11
    • 2010-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多