123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- 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")
|