Files
2026-07-13 12:31:34 +08:00

82 lines
1.9 KiB
Python

# -*- coding: utf-8 -*-
"""
@File : excel_util.py
@Date : 2023-11-16
"""
import re
from openpyxl import Workbook
from openpyxl.reader.excel import load_workbook
from openpyxl.utils import get_column_letter
def read_excel(filename):
"""
读取excel文件为python对象
:param filename:
:return: iterator
"""
book = load_workbook(filename)
worksheet = book.worksheets[0]
titles = []
row_num = 0
for row in worksheet.rows:
row_num += 1
if row_num == 1:
# 表头
titles = [cell.value.strip() for cell in row]
else:
# 内容
yield dict(zip(titles, [cell.value for cell in row]))
book.close()
def write_excel(filename, rows):
"""
将列表写入到文件
:param filename:
:param rows: list
:return:
"""
workbook = Workbook()
worksheet = workbook.active
# 表头
if len(rows) > 0:
for i, key in enumerate(rows[0].keys()):
worksheet.cell(row=1, column=i + 1, value=key)
# 内容
for x, row in enumerate(rows):
for y, value in enumerate(row.values()):
worksheet.cell(row=x + 2, column=y + 1, value=value)
# 调整列宽
# 参考:https://blog.csdn.net/gongzairen/article/details/130819231
width = 3 # 手动加宽的数值
# 单元格列宽处理
dims = {}
for row in worksheet.rows:
for cell in row:
if cell.value:
cell_len = 0.7 * len(re.findall('([\u4e00-\u9fa5])', str(cell.value))) + len(str(cell.value))
dims[cell.column] = max((dims.get(cell.column, 0), cell_len))
for col, value in dims.items():
worksheet.column_dimensions[get_column_letter(col)].width = value + width
workbook.save(filename)
workbook.close()
if __name__ == '__main__':
write_excel('./demo.xlsx', [
{'name': 'Tom', 'age': 23},
{'name': 'Jack', 'age': 24},
])