xlnt/benchmarks/profiling.cpp

132 lines
3.2 KiB
C++
Raw Normal View History

2016-02-06 23:04:41 +08:00
from io import BytesIO
from lxml.etree import xmlfile
import os
from random import randint
from openpyxl import Workbook
from openpyxl.xml.functions import XMLGenerator
def make_worksheet():
wb = Workbook()
ws = wb.active
for i in range(1000):
ws.append(list(range(100)))
return ws
def lxml_writer(ws=None):
from openpyxl.writer.lxml_worksheet import write_rows
if ws is None:
ws = make_worksheet()
out = BytesIO()
with xmlfile(out) as xf:
write_rows(xf, ws)
#with open("lxml_writer.xml", "wb") as dump:
#dump.write(out.getvalue())
#ws.parent.save("lxml_writer.xlsx")
def make_dump_worksheet():
wb = Workbook(write_only=True)
ws = wb.create_sheet()
return ws
def dump_writer(ws=None):
if ws is None:
ws = make_dump_worksheet()
for i in range(1000):
ws.append(list(range(100)))
COLUMNS = 100
ROWS = 1000
BOLD = 1
ITALIC = 2
UNDERLINE = 4
RED_BG = 8
formatData = [[None] * COLUMNS for _ in range(ROWS)]
def generate_format_data():
for row in range(ROWS):
for col in range(COLUMNS):
formatData[row][col] = randint(1, 15)
def styled_sheet():
from openpyxl import Workbook
from openpyxl.styles import Font, Style, PatternFill, Color, colors
wb = Workbook()
ws = wb.active
ws.title = 'Test 1'
red_fill = PatternFill(fill_type='solid', fgColor=Color(colors.RED), bgColor=Color(colors.RED))
empty_fill = PatternFill()
styles = []
# pregenerate relevant styles
for row in range(ROWS):
_row = []
for col in range(COLUMNS):
cell = ws.cell(row=row+1, column=col+1)
cell.value = 1
font = {}
fill = PatternFill()
if formatData[row][col] & BOLD:
font['bold'] = True
if formatData[row][col] & ITALIC:
font['italic'] = True
if formatData[row][col] & UNDERLINE:
font['underline'] = 'single'
if formatData[row][col] & RED_BG:
fill = red_fill
cell.style = Style(font=Font(**font), fill=fill)
#wb.save(get_output_path('test_openpyxl_style_std_pregen.xlsx'))
def read_workbook():
from openpyxl import load_workbook
folder = os.path.split(__file__)[0]
src = os.path.join(folder, "files", "very_large.xlsx")
wb = load_workbook(src)
return wb
def rows(wb):
ws = wb.active
rows = ws.iter_rows()
for r, row in enumerate(rows):
for c, col in enumerate(row):
pass
print((r+1)* (c+1), "cells")
def col_index1():
from openpyxl.cell import get_column_letter
for i in range(1, 18279):
c = get_column_letter(i)
"""
Sample use
import cProfile
ws = make_worksheet()
cProfile.run("profiling.lxml_writer(ws)", sort="tottime")
"""
if __name__ == '__main__':
import cProfile
ws = make_worksheet()
#wb = read_workbook()
#cProfile.run("rows(wb)", sort="tottime")
#cProfile.run("make_worksheet()", sort="tottime")
#cProfile.run("lxml_writer(ws)", sort="tottime")
#generate_format_data()
#cProfile.run("styled_sheet()", sort="tottime")
#ws = make_dump_worksheet()
#cProfile.run("dump_writer(ws)", sort="tottime")
cProfile.run("col_index1()", sort="tottime")