mirror of
https://github.com/tfussell/xlnt.git
synced 2024-03-22 13:11:17 +08:00
132 lines
3.2 KiB
C++
132 lines
3.2 KiB
C++
|
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")
|