我有一个Python 2.7脚本,可以转换各种数据并通过OpenPyXL 2.4.5将其输出到XLSX。目前我正在遍历所有单元格,我已经使用“max_row”和“max_column”缩小了范围。这对我来说似乎不是非常快或有效。设置以下内容的最快方法是什么?如果您可以建议一般方法,我将不胜感激。下面的粗略基准适用于Windows 7 SP1 x64,具有16 GB RAM和Intel i7-3740QM@2.69 GHz。
以下是迭代方法。
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
答案 0 :(得分:0)
您不应该在循环中调用ws.max_row
或ws.max_column
,因为每次调用它们时都会计算它们。由于工作表的大小在工作期间没有变化,因此只需要调用一次。
此外,将样式应用于行和列维度可能无法完成您期望的操作,请参阅相关文档。您需要将样式应用于相关行和列中的单元格。如果要格式化大量单元格,请使用命名样式。