python使用openpyxl库按 行/列 合并/拆分 Excel表格


在这里插入图片描述

1.准备数据

准备一个名为test1的excel文件,该工作簿里有sheet1,sheet2,sheet3,sheet4四个工作表。
数据可以随便设定,示例数据形式如下:


sheet1:
在这里插入图片描述


sheet2:
在这里插入图片描述


sheet3:
在这里插入图片描述


sheet4:

在这里插入图片描述


from openpyxl import load_workbook
wb = load_workbook("test1.xlsx")  # 获取整个工作簿
wslist = wb.worksheets  # 获取工作簿的所有工作表,放在一个列表中

# 依次取出test1中的sheet1,sheet2,sheet3,sheet4
ws1 = wslist[0]
ws2 = wslist[1]
ws3 = wslist[2]
ws4 = wslist[3]

按行合并

将test1中的sheet1与sheet2的数据进行列合并,结果保存在一个名为test2的文件,中的new_sheet1表格中。

data1 = ws1["A1:E11"]
data2 = ws2["A2":"E11"]
data = data1 + data2
ws_new1 = wb.create_sheet('new_sheet1')

for i in range(len(data)):
    for j in range(len(data[i])):
        ws_new1.cell(i+1, j+1, data[i][j].value)

按行拆分

将test1中的sheet1与进行按行拆分,结果保存在一个名为test2的文件,中的new_sheet2,new_sheet3表格中。
sheet1一共有11行,拆分规则为:前5行放在new_sheet2中,后6行放在new_sheet3中。

data3 = ws1['A1:E5']
data4 = ws1['A6:E11']
ws_new2 = wb.create_sheet('new_sheet2')
ws_new3 = wb.create_sheet('new_sheet3')

for i in range(len(data3)):
    for j in range(len(data3[i])):
        ws_new2.cell(i+1, j+1, data3[i][j].value)

for i in range(len(data4)):
    for j in range(len(data4[i])):
        ws_new3.cell(i+1, j+1, data4[i][j].value)

按列合并

将test1中的sheet3与sheet4的数据进行列合并,结果保存在一个名为test2的文件,中的new_sheet4表格中。

data5 = ws3["A1:C21"]
data6 = ws4["A1":"B21"]
ws_new4 = wb.create_sheet('new_sheet4')

for i in range(len(data5)):
    for j in range(len(data5[i])):
        ws_new4.cell(i+1, j+1, data5[i][j].value)

n = len(data5[0])
for i in range(len(data6)):
    for j in range(len(data6[i])):
        ws_new4.cell(i+1, j+n+1, data6[i][j].value)

按列拆分

将test1中的sheet1进行列拆分,拆分成两个表格,结果保存在一个名为test2的文件,中的new_sheet5和new_sheet6表格中。
拆分规则:将sheet的左三列放在new_sheet5中,右二列放在new_sheet6中。

data7 = ws1["A1:C11"]
data8 = ws1["D1":"E11"]
ws_new5 = wb.create_sheet('new_sheet5')
ws_new6 = wb.create_sheet('new_sheet6')

for i in range(len(data7)):
    for j in range(len(data7[i])):
        ws_new5.cell(i+1, j+1, data7[i][j].value)

for i in range(len(data8)):
    for j in range(len(data8[i])):
        ws_new6.cell(i+1, j+1, data8[i][j].value)

保存文件

wb.save("test2.xlsx")

以上功能均已实现,请自行测试,这里不在一一展示。
test2:
在这里插入图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

侯小啾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值