profiling.cpp 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. from io import BytesIO
  2. from lxml.etree import xmlfile
  3. import os
  4. from random import randint
  5. from openpyxl import Workbook
  6. from openpyxl.xml.functions import XMLGenerator
  7. def make_worksheet():
  8. wb = Workbook()
  9. ws = wb.active
  10. for i in range(1000):
  11. ws.append(list(range(100)))
  12. return ws
  13. def lxml_writer(ws=None):
  14. from openpyxl.writer.lxml_worksheet import write_rows
  15. if ws is None:
  16. ws = make_worksheet()
  17. out = BytesIO()
  18. with xmlfile(out) as xf:
  19. write_rows(xf, ws)
  20. #with open("lxml_writer.xml", "wb") as dump:
  21. #dump.write(out.getvalue())
  22. #ws.parent.save("lxml_writer.xlsx")
  23. def make_dump_worksheet():
  24. wb = Workbook(write_only=True)
  25. ws = wb.create_sheet()
  26. return ws
  27. def dump_writer(ws=None):
  28. if ws is None:
  29. ws = make_dump_worksheet()
  30. for i in range(1000):
  31. ws.append(list(range(100)))
  32. COLUMNS = 100
  33. ROWS = 1000
  34. BOLD = 1
  35. ITALIC = 2
  36. UNDERLINE = 4
  37. RED_BG = 8
  38. formatData = [[None] * COLUMNS for _ in range(ROWS)]
  39. def generate_format_data():
  40. for row in range(ROWS):
  41. for col in range(COLUMNS):
  42. formatData[row][col] = randint(1, 15)
  43. def styled_sheet():
  44. from openpyxl import Workbook
  45. from openpyxl.styles import Font, Style, PatternFill, Color, colors
  46. wb = Workbook()
  47. ws = wb.active
  48. ws.title = 'Test 1'
  49. red_fill = PatternFill(fill_type='solid', fgColor=Color(colors.RED), bgColor=Color(colors.RED))
  50. empty_fill = PatternFill()
  51. styles = []
  52. # pregenerate relevant styles
  53. for row in range(ROWS):
  54. _row = []
  55. for col in range(COLUMNS):
  56. cell = ws.cell(row=row+1, column=col+1)
  57. cell.value = 1
  58. font = {}
  59. fill = PatternFill()
  60. if formatData[row][col] & BOLD:
  61. font['bold'] = True
  62. if formatData[row][col] & ITALIC:
  63. font['italic'] = True
  64. if formatData[row][col] & UNDERLINE:
  65. font['underline'] = 'single'
  66. if formatData[row][col] & RED_BG:
  67. fill = red_fill
  68. cell.style = Style(font=Font(**font), fill=fill)
  69. #wb.save(get_output_path('test_openpyxl_style_std_pregen.xlsx'))
  70. def read_workbook():
  71. from openpyxl import load_workbook
  72. folder = os.path.split(__file__)[0]
  73. src = os.path.join(folder, "files", "very_large.xlsx")
  74. wb = load_workbook(src)
  75. return wb
  76. def rows(wb):
  77. ws = wb.active
  78. rows = ws.iter_rows()
  79. for r, row in enumerate(rows):
  80. for c, col in enumerate(row):
  81. pass
  82. print((r+1)* (c+1), "cells")
  83. def col_index1():
  84. from openpyxl.cell import get_column_letter
  85. for i in range(1, 18279):
  86. c = get_column_letter(i)
  87. """
  88. Sample use
  89. import cProfile
  90. ws = make_worksheet()
  91. cProfile.run("profiling.lxml_writer(ws)", sort="tottime")
  92. """
  93. if __name__ == '__main__':
  94. import cProfile
  95. ws = make_worksheet()
  96. #wb = read_workbook()
  97. #cProfile.run("rows(wb)", sort="tottime")
  98. #cProfile.run("make_worksheet()", sort="tottime")
  99. #cProfile.run("lxml_writer(ws)", sort="tottime")
  100. #generate_format_data()
  101. #cProfile.run("styled_sheet()", sort="tottime")
  102. #ws = make_dump_worksheet()
  103. #cProfile.run("dump_writer(ws)", sort="tottime")
  104. cProfile.run("col_index1()", sort="tottime")