Python实现Excel行列转换

这两天公司在进行人事系统切换,HR小同事焦头烂额的跑过来问我,有没有办法弄excel行列转换呀?我想了想:"用Excel的行列转换不就可以了吗?"啪啦啪啦的说了一堆,然后打开Excel给她演示。小同事不屑一顾:"这么简单还要问你呀!你看看我这个数据源,是所有员工的考勤数据,旧系统是行显示,新系统导入要按照列统计。要按照人员进行排列,还有缺勤的要留空...".一下子把我弄懵了,一下子还没想出简单快捷的办法。小同事又接着说,我现在手工一个个的弄,还不知道弄到什么时候呢。要不贴错了就苦逼了。看来,遇到棘手的还是想到了IT,我拍拍胸膛,这事包我身上。小同事一脸疑惑:"行吗"?"当然"。看来要再次搬出Python的看家伎俩了。没办法,谁让Python处理数据那是天生的?

原数据格式:

目标数据格式:

根据HR同事的要求,对需求进行了分析并归纳如下步骤:

  1. 读取数据源,将数据装入list中
  2. 从list中提取人员名单,去重
  3. 根据人员名单,筛选考勤记录,装入临时list中,进行日期处理,并返回到最终list, 删除临时表。
  4. 最终list写入原excel,完成。

参考代码如下:

from openpyxl import load_workbook

fname="source.xlsx"

def remove_duplicates(lst):#去重

return x for i, x in enumerate(lst) if i == lst.index(x)

def two_to_one(lst):

a=\[\]

for line in lst:

for perline in line:

a.append(perline)

return a

per_line=\[\]

total_line=\[\]

per_name_list=\[\]

name_list=\[\]

wb=load_workbook(fname,data_only=True) #读取数据源

ws=wb"Sheet4"

for row in ws.iter_rows():

i=0

for cell in row:

if i==1 or i==2 or i==3:

per_line.append(cell.value)

if i==1:

per_name_list.append(cell.value)

i+=1

total_line.append(per_line)

name_list.append(per_name_list)

per_line=\[\]

per_name_list=\[\]

name_list2=remove_duplicates(name_list1:)

print(name_list2) #打印去重后的名单

e_per_line=\[\]

e_line=\[\]

new_line=\[\]

new_line2=\[\]

all_list=\[\]

for line in name_list2:

#print(line)显示人名

for perline in total_line:

if line0==perline0:

e_per_line.append(perline1)

e_per_line.append(perline2)

if len(e_per_line)!=0:

e_line.append(e_per_line)

e_per_line=\[\]

#print(e_line)

new_line=two_to_one(e_line)

new_line2=line+new_line

#print(new_line2)

all_list.append(new_line2)

print("------------------")

e_line=\[\]

wb2=load_workbook('source.xlsx')#回写处理后的数据

ws2=wb2"Sheet31"

for line in all_list:

ws2.append(line)

wb2.save('source.xlsx')

相关推荐
ServBay2 分钟前
AI 工程师必备的 9 个 Python 库,从数据验证到模型优化
后端·python·ai编程
九九落40 分钟前
JavaScript 实现北京时间精确到毫秒显示:UTC+8、Asia/Shanghai 与在线时间校准详解
开发语言·javascript·ecmascript
AC赳赳老秦42 分钟前
企业级合规审计体系:用 OpenClaw 落地采集全链路留痕,自动生成合规审计报告
java·python·django·beautifulsoup·php·deepseek·openclaw
IPdodo_1 小时前
代理 IP 服务商 SLA 怎么验?7 项指标与 Python 探测脚本实战
运维·python·网络协议·网络安全·代理ip
微软技术分享1 小时前
使用Masscan扫描器进行信息搜集
python·masscan·信息搜集
青 春 记 忆1 小时前
零基础入门python23:Flask-Login登录、退出与会话
python·flask·后端开发
东华万里1 小时前
第41篇 C++类与对象核心知识梳理:从底层原理到面试实战
开发语言·c++·大学生专区
微小冷2 小时前
Python图论库NetworkX初步
开发语言·python·图论·graph·networkx·digraph
Data_Journal2 小时前
如何使用 Python 抓取 Google Flights:分步指南
大数据·开发语言·数据库·python·scrapy
你我一见如故3 小时前
仿QQ音乐桌面客户端——测试报告
python·selenium