高效办公7——Python批量转换Excel同维度数据单一单元格
2020-07-20 本文已影响0人
模仿打酱油
场景概述
这个标题可能过于笼统,只因个人不知如何具体陈述。想要表达的内容如下:
原数据data.xlsx中Sheet1工作表数据:
1595172980(1).png
需将原数据转换成下图效果,并保存到data.xlsx文件的Sheet2工作表中:
1595185430(1).png
对于这个需求,部分小伙伴会认为无需多此一举,直接Excel字符串连接就OK,如果对于小规模数据,那当然再简单不过,但遇到大规模数据,该方法就能派上用场了。当然,如果小伙伴有更好的方法,还望分享!
需求准备
先在data.xlsx文件中创建工作表Sheet2,否则会报错!!!
工具准备
openpyxl模块
代码实现
from openpyxl import load_workbook
# 需要处理的文件
file = r'C:/Users/SYH/Desktop/test/data.xlsx'
wb = load_workbook(file)
# 激活工作表'Sheet1'
ws = wb['Sheet1']
# 获取数据范围,即数据最大的行数和列数
max_r = ws.max_row
max_c = ws.max_column
# 定义工作表
ws_res = wb['Sheet2']
# 创建表头
ws_res['A1'] = '班级'
ws_res['B1'] = '学生'
r_num = 2
c_num = 1
str_data = []
for r in range(2, max_r + 1):
str_data.append(ws.cell(r, 2).value)
if ws.cell(r, 1).value == ws.cell(r + 1, 1).value:
ws_res.cell(row=c_num + 1, column=1, value=ws.cell(r, 1).value)
ws_res.cell(row=c_num + 1, column=2, value='、'.join(str_data))
r_num = r_num + 1
else:
ws_res.cell(row=c_num + 1, column=2, value='、'.join(str_data)) # 用顿号分隔
c_num = c_num + 1
r_num = 2
str_data = []
continue
# 保存数据
wb.save(file)
执行代码,完成预期效果!
1595225520(1).jpg