excel_tools.py 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. # author : zhaolongyue
  4. #date : 2021/4/28
  5. import xlsxwriter
  6. import pandas as pd
  7. import openpyxl
  8. class ExcelUtil:
  9. @staticmethod
  10. def writer_excel(path, sheet_name, title_name, alist, vlist):
  11. """
  12. mongo数据写入excel
  13. :param path: 路径
  14. :param vlist: mongo游标
  15. :param columns: 所需字段
  16. :param headings: 表头
  17. :return:
  18. """
  19. workbook = xlsxwriter.Workbook(path, {'constant_memory': True, 'strings_to_urls': False})
  20. worksheet = workbook.add_worksheet(name=sheet_name)
  21. # 加了格式会慢
  22. header_format = workbook.add_format({
  23. 'font_size': 12, # 字体
  24. 'bold': True, # 加粗
  25. # 'text_wrap': True,#换行
  26. 'align': 'center', # 居中
  27. 'valign': 'vcenter',
  28. # 'fg_color': '#D7E4BC',#颜色
  29. # 'border': customer_program#边框
  30. })
  31. title_format = workbook.add_format({ # 样式设置
  32. 'font_size': 16, # 字体
  33. 'bold': True, # 加粗
  34. 'text_wrap': True, # 换行
  35. 'align': 'center', # 水平居中
  36. 'valign': 'vcenter', # 垂直居中
  37. # 'fg_color': '#D7E4BC', # 颜色
  38. # 'border': customer_program # 边框
  39. })
  40. count = 2
  41. worksheet.merge_range('A1:U1', title_name, title_format)
  42. # worksheet.write_row(customer_program, 0, headings,header_format)
  43. # 写入表头并添加格式
  44. for row_header, rowdata_header in enumerate(alist):
  45. for col_header, coldata_header in enumerate(rowdata_header):
  46. if row_header == 1:
  47. worksheet.write(row_header, col_header, coldata_header, header_format)
  48. for item in alist:
  49. value = []
  50. i = 0
  51. for k in vlist:
  52. sum = 0
  53. for key in item:
  54. sum += 1
  55. if k == key:
  56. value.insert(i, item[key])
  57. break
  58. elif sum == len(item) and k != key:
  59. value.insert(i, '')
  60. i += 1
  61. data = value
  62. worksheet.write_row(count, 0, data)
  63. count += 1
  64. if count % 1000 == 0:
  65. print(count)
  66. worksheet.set_column('A:A', 10, header_format) # 指定列设置样式
  67. workbook.close()
  68. @staticmethod
  69. def add_excel(path, sheet_name, title_name, alist, vlist):
  70. """
  71. mongo数据写入excel
  72. :param path: 路径
  73. :param vlist: mongo游标
  74. :param columns: 所需字段
  75. :param headings: 表头
  76. :return:
  77. """
  78. workbook = xlsxwriter.Workbook(path, {'constant_memory': True, 'strings_to_urls': False})
  79. worksheet = workbook.add_worksheet(name=sheet_name) # 加了格式会慢
  80. header_format = workbook.add_format({
  81. 'font_size': 12, # 字体
  82. 'bold': True, # 加粗
  83. # 'text_wrap': True,#换行
  84. 'align': 'center', # 居中
  85. 'valign': 'vcenter',
  86. # 'fg_color': '#D7E4BC',#颜色
  87. # 'border': customer_program#边框
  88. })
  89. title_format = workbook.add_format({ # 样式设置
  90. 'font_size': 16, # 字体
  91. 'bold': True, # 加粗
  92. 'text_wrap': True, # 换行
  93. 'align': 'center', # 水平居中
  94. 'valign': 'vcenter', # 垂直居中
  95. # 'fg_color': '#D7E4BC', # 颜色
  96. # 'border': 1 # 边框
  97. })
  98. count = 2
  99. worksheet.merge_range('A1:U1', title_name, title_format)
  100. # worksheet.write_row(1, 0, headings,header_format)
  101. # 写入表头并添加格式
  102. for row_header, rowdata_header in enumerate(alist):
  103. for col_header, coldata_header in enumerate(rowdata_header):
  104. if row_header == 1:
  105. worksheet.write(row_header, col_header, coldata_header, header_format)
  106. for item in alist:
  107. value = []
  108. i = 0
  109. for k in vlist:
  110. sum = 0
  111. for key in item:
  112. sum += 1
  113. if k == key:
  114. value.insert(i, item[key])
  115. break
  116. elif sum == len(item) and k != key:
  117. value.insert(i, '')
  118. i += 1
  119. data = value
  120. worksheet.write_row(count, 0, data)
  121. count += 1
  122. if count % 1000 == 0:
  123. print(count)
  124. worksheet.set_column('A:A', 10, header_format) # 指定列设置样式
  125. workbook.close()
  126. @staticmethod
  127. def from_excel(path,sheet_name):
  128. # 读取表中关键词
  129. data_all_keys = pd.read_excel(path, sheet_name=sheet_name).fillna("")
  130. #读取所有表头
  131. data_header = list(data_all_keys.columns)
  132. #读取指定表头 data_all_keys["spidercode"]