下面是关于“python利用openpyxl拆分多个工作表的工作簿的方法”的详细讲解,包含了完整的实例教程和示例说明。
1. 前言
Excel表格是我们日常工作和生活中比较常用的一种数据处理方式,有时候我们需要对一个大表格进行拆分,这时候我们可以使用Python中的openpyxl库来实现这个功能。
2. openpyxl库
openpyxl是一个Python库,用于读写Excel 2010 xlsx /xlsm /xltx /xltm文件,它可以实现Excel的多种功能,如创建、修改和更新工作簿、工作表、图表等等。
可以在Python中使用如下命令安装openpyxl库:
pip install openpyxl
3. 拆分Excel表格
下面是一个实际的例子,我们以一个存储订单数据的Excel表格为例,来讲解如何拆分Excel表格。
Excel表格的原始数据如下:
订单号 | 商品名称 | 数量 | 价格 |
---|---|---|---|
001 | 商品A | 10 | 8.00 |
002 | 商品B | 5 | 6.00 |
003 | 商品C | 3 | 12.50 |
004 | 商品A | 5 | 8.00 |
005 | 商品B | 2 | 7.00 |
我们现在的任务是将上表中的数据按照分类拆分成多个工作表的工作簿,比如按照商品名称将订单数据进行分类,生成多个工作表。
3.1 准备工作
首先我们需要打开Excel表格文件并读取其中的数据,这可以使用openpyxl库来实现。以下是读取Excel表格中数据的示例代码:
import openpyxl
# 打开Excel文件
wb = openpyxl.load_workbook('file.xlsx')
# 打开Excel表格中的工作表
ws = wb['Sheet1']
# 读取Excel表格中的数据
for row in ws.iter_rows(min_row=2):
order_id = row[0].value
product_name = row[1].value
quantity = row[2].value
price = row[3].value
print(order_id, product_name, quantity, price)
其中,我们通过openpyxl.load_workbook
方法打开Excel文件,然后通过workbook对象的active
属性或者wb['表格名称']
方法获取表格中的工作表。此处我们获取了名为Sheet1的工作表,并通过Sheet对象的iter_rows()
方法来遍历表格中每一行的数据。
3.2 拆分Excel表格
接下来,我们需要对Excel表格进行拆分操作。我们可以根据商品名称来拆分数据,以下是实现拆分操作的示例代码:
import os
import openpyxl
# 打开Excel文件
wb = openpyxl.load_workbook('file.xlsx')
# 打开Excel表格中的工作表
ws = wb['Sheet1']
data = {}
# 读取Excel表格中的数据
for row in ws.iter_rows(min_row=2):
order_id = row[0].value
product_name = row[1].value
quantity = row[2].value
price = row[3].value
if product_name not in data.keys():
data[product_name] = []
data[product_name].append([order_id, product_name, quantity, price])
# 拆分Excel表格
for product_name, orders in data.items():
wb1 = openpyxl.Workbook()
ws1 = wb1.active
ws1.append(['订单号', '商品名称', '数量', '价格'])
for order in orders:
ws1.append(order)
wb1.save(f'{product_name}.xlsx')
os.remove(f'{product_name}.xlsx')
这段代码的作用是将Excel表格按照商品名称进行拆分。首先,我们读取Excel表格中的每行数据,并按照商品名称对数据进行分类,将分类后的数据存储到字典data
中。
接着,我们使用openpyxl.Workbook()
方法创建一个新的工作簿,并在其中创建一个工作表,将分类后的数据写入到新的工作表中。最后使用save()
方法,将新的工作簿保存到本地硬盘,os.remove()
方法删除临时文件。
运行上述示例代码之后,会在当前目录下生成一个名为商品A.xlsx、商品B.xlsx、商品C.xlsx的工作簿,其中每个工作簿包含了按照商品名称拆分后的订单数据。
4. 示例说明
以下是两个关于拆分Excel表格的示例说明。
示例一
Excel表格中存储了一个学生的成绩信息,包括姓名、学号、班级、语文成绩、数学成绩、英语成绩等多个字段。请使用Python的openpyxl库将表格按照班级拆分成多个工作表,每个工作表只包含一个班级的学生信息。
解决方案:
- 打开Excel表格文件,并读取其中的数据;
- 根据班级对数据进行分类,将分类后的数据存储到字典data中;
- 使用openpyxl库创建新的工作簿和工作表,并将分类后的数据写入到新的工作表中;
- 将新的工作簿保存到本地硬盘,并删除临时文件。
示例代码如下:
import os
import openpyxl
# 打开Excel文件
wb = openpyxl.load_workbook('file.xlsx')
# 打开Excel表格中的工作表
ws = wb['Sheet1']
data = {}
# 读取Excel表格中的数据
for row in ws.iter_rows(min_row=2):
name = row[0].value
student_id = row[1].value
class_name = row[2].value
chinese_score = row[3].value
math_score = row[4].value
english_score = row[5].value
if class_name not in data.keys():
data[class_name] = []
data[class_name].append([name, student_id, class_name, chinese_score, math_score, english_score])
# 拆分Excel表格
for class_name, students in data.items():
wb1 = openpyxl.Workbook()
ws1 = wb1.active
ws1.append(['姓名', '学号', '班级', '语文成绩', '数学成绩', '英语成绩'])
for student in students:
ws1.append(student)
wb1.save(f'{class_name}.xlsx')
print('拆分完成!')
示例二
Excel表格中存储了一些客户的订单信息,包括订单编号、客户姓名、订单时间、商品名称、商品数量、商品单价等。请使用Python的openpyxl库将表格按照订单时间拆分成多个工作表,每个工作表只包含一个月份的订单信息。
解决方案:
- 打开Excel表格文件,并读取其中的数据;
- 根据订单时间对数据进行分类,将分类后的数据存储到字典data中;
- 使用openpyxl库创建新的工作簿和工作表,并将分类后的数据写入到新的工作表中;
- 将新的工作簿保存到本地硬盘,并删除临时文件。
示例代码如下:
import os
import openpyxl
from datetime import datetime
# 打开Excel文件
wb = openpyxl.load_workbook('file.xlsx')
# 打开Excel表格中的工作表
ws = wb['Sheet1']
data = {}
# 读取Excel表格中的数据
for row in ws.iter_rows(min_row=2):
order_id = row[0].value
customer_name = row[1].value
order_time = row[2].value
product_name = row[3].value
quantity = row[4].value
price = row[5].value
year = order_time.year
month = order_time.month
if year not in data.keys():
data[year] = {}
if month not in data[year].keys():
data[year][month] = []
data[year][month].append([order_id, customer_name, order_time, product_name, quantity, price])
# 拆分Excel表格
for year, months in data.items():
for month, orders in months.items():
wb1 = openpyxl.Workbook()
ws1 = wb1.active
ws1.append(['订单编号', '客户姓名', '订单时间', '商品名称', '商品数量', '商品单价'])
for order in orders:
ws1.append(order)
month_str = datetime.strftime(datetime(year, month, 1), '%Y%m')
wb1.save(f'{month_str}订单.xlsx')
os.remove(f'{month_str}订单.xlsx')
print('拆分完成!')
5. 总结
本文通过实际案例,结合openpyxl库的使用,对Python如何拆分Excel表格进行了详细的讲解。同时,我们还提供了两个示例,希望对读者有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python利用openpyxl拆分多个工作表的工作簿的方法 - Python技术站