Python3 openpyxl库
用于读取和写入 Excel 2010 xlsx/xlsm/xltx/xltm 文件。通过 pip install openpyxl 命令下载 openpyxl 库。
演示代码
通过下面的演示代码,可以快速创建一个名为 sample.xlsx 的表格文件:
from openpyxl import Workbook
import datetime
wb = Workbook()
# 获取活动工作表
ws = wb.active
# 数据可以直接分配到单元格
ws['A1'] = 42
# 行也可以追加
ws.append([1, 2, 3])
# Python类型将自动转换
ws['A2'] = datetime.datetime.now()
# 保存文件
wb.save("sample.xlsx")
openpyxl_sample.png
通用方案
通用读取类
创建一个 excel_to_dict.py 文件,写入下面的代码:
from os.path import isfile
from openpyxl import load_workbook
class ExcelToDict:
"""
将Excel文件对象转成Python字典对象
"""
def __init__(self, file_dir, title_row=0):
# 工作簿文件的路径
self.file_dir = file_dir
# 标题行位于第几行
self.title_row = int(title_row)
self.data_dict = {}
self.work_book = None
def open_object(self):
"""打开工作簿对象"""
valid = isfile(self.file_dir)
# file_dir指向的文件是否不存在
if not valid:
raise Exception('文件路径 {0} 不存在'.format(self.file_dir))
self.work_book = load_workbook(filename=self.file_dir)
def read_excel(self):
"""读取工作簿数据"""
if not self.work_book:
raise Exception('需要先调用 open_object() 方法以打开工作簿对象')
for sheet_name in self.work_book.sheetnames:
# 每个工作表的字典
data_dict_sheet = {'title_row': [], 'value_row': {}}
# 获取工作表对象
ws = self.work_book[sheet_name]
# 预先创建工作表中每一行的字典
for i in range(ws.max_row - 1 - self.title_row):
data_dict_sheet['value_row'][i] = {}
# 遍历所有列
columns = tuple(ws.columns)
for column in columns:
# 每一列的标题
title = column[self.title_row].value
# 记录每列的标题
data_dict_sheet['title_row'].append(title)
row_num = 0
# 遍历每一列中的所有值
for col in column:
# 忽略每一列的标题行
if column.index(col) <= self.title_row:
continue
data_dict_sheet['value_row'][row_num][title] = col.value
row_num += 1
# 记录每个工作表的数据字段
self.data_dict[sheet_name] = data_dict_sheet
def check(self, check_item=None, sheet_name=None, sheet_index=0):<