Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 最快的格式化方法_Python 2.7_Openpyxl - Fatal编程技术网

Python 2.7 最快的格式化方法

Python 2.7 最快的格式化方法,python-2.7,openpyxl,Python 2.7,Openpyxl,我有一个Python 2.7脚本,可以转换各种数据,并通过OpenPyXL 2.4.5将其输出到XLSX。目前,我正在遍历所有单元格,我使用“max_行”和“max_列”缩小了单元格的范围。在我看来,这不是很快也不是很有效。设置以下各项的最快方法是什么?如果您能提出一般方法,我将不胜感激。下面的粗略基准是针对具有16 GB RAM和Intel i7的Windows 7 SP1 x64的-3740QM@2.69千兆赫 边框(格式化35880个单元格需要40秒。) 字体和对齐方式(格式化35880

我有一个Python 2.7脚本,可以转换各种数据,并通过OpenPyXL 2.4.5将其输出到XLSX。目前,我正在遍历所有单元格,我使用“max_行”和“max_列”缩小了单元格的范围。在我看来,这不是很快也不是很有效。设置以下各项的最快方法是什么?如果您能提出一般方法,我将不胜感激。下面的粗略基准是针对具有16 GB RAM和Intel i7的Windows 7 SP1 x64的-3740QM@2.69千兆赫

  • 边框(格式化35880个单元格需要40秒。)
  • 字体和对齐方式(格式化35880个单元格需要42秒。)
  • 着色(格式化35880个单元格需要28秒。)
  • 隐藏未使用的行/列(隐藏16380列x 1039606行需要许多分钟。仅隐藏列需要.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

您不应该在循环中调用
ws.max\u行
ws.max\u列
,因为每次调用循环时都会计算它们。由于工作表的大小在工作过程中没有改变,因此只需调用一次


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

-谢谢你的指针。我是Python的新手,如果这个问题很傻,请原谅,我不是在for循环外指定了“max_行”/“max_列”吗?在嵌套函数中调用
max_列
,在for循环中调用此函数。