ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1719|回复: 8

[分享] 员工打卡记录的数据提取整理

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-11-15 09:46 | 显示全部楼层 |阅读模式
本帖最后由 chenwenyong 于 2020-11-15 09:51 编辑

file:///C:\Users\Mitu\AppData\Roaming\Tencent\Users\352166534\QQ\WinTemp\RichOle\(TJN%@P9@YHNY0V~DN`7VVH.pngfile:///C:\Users\Mitu\AppData\Roaming\Tencent\Users\352166534\QQ\WinTemp\RichOle\5BLGZI4TTN4UY6_1WF(JC25.png这是群友提出的数据整理须求。之所以费神研究,纯粹是无聊。在这里发贴也仅是作一个成品存储之地,或许以后有须要之时。顺便也让有兴趣的人共同研究。
过程及思路:根据原始数据规律把数据分割成“工号,日期,时间”的列表,这里要用到的函数主要有List.PositionOf,List.InsertRange,List.TransformMany,List.Range; 提取完毕后,再生成“工号,姓名,部门,日期,时间”的记录列表,这里要用到的函数有List.Transform,List.Zip,List.Range,以及从列到记录,从记录到表,各类展开等函数,具体看源文件。不做过多详细解释。
1.png
2.png

员工刷卡记录表9月.rar

155.36 KB, 下载次数: 71

TA的精华主题

TA的得分主题

发表于 2020-11-15 22:04 | 显示全部楼层
本帖最后由 libo5563 于 2020-11-15 22:07 编辑

晕,居然没存盘,没劲再写一遍了,字段名要修改一下
11111.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-11-15 22:59 来自手机 | 显示全部楼层
本帖最后由 chenwenyong 于 2020-11-15 23:06 编辑
libo5563 发表于 2020-11-15 22:04
晕,居然没存盘,没劲再写一遍了,字段名要修改一下


还是个半成品,日期成了第一次打卡,时间没有分列,公式不完整! 既然出手了就再麻烦兄弟,把公式整完善一下,也供以后或许需要的人省点力气!

TA的精华主题

TA的得分主题

发表于 2020-11-16 00:44 | 显示全部楼层
PowerQuery参考解法
QQ图片20201116004250.png

员工刷卡记录表9月.zip

104.93 KB, 下载次数: 38

TA的精华主题

TA的得分主题

发表于 2020-11-16 12:36 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
工号19,郭强8-11日5次打卡记录
11111.jpg

员工刷卡记录表9月.rar

112.37 KB, 下载次数: 16

TA的精华主题

TA的得分主题

发表于 2020-11-16 23:47 | 显示全部楼层
一种方法供参考,,,
图片.jpg

员工刷卡记录表9月-超人.rar

116.25 KB, 下载次数: 89

TA的精华主题

TA的得分主题

发表于 2020-12-1 15:07 | 显示全部楼层
有没有M函数进阶的介绍哦,看的好费劲哦,想系统的学习下。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-1-12 15:56 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
更新一个 let     源 = Excel.Workbook(File.Contents("C:\Users\Mitu\Downloads\员工刷卡记录表9月\员工刷卡记录表9月.xlsx"), null, true)[Data]{0},     只保留月份内行 = Table.SelectColumns(源, List.Transform({1..31},each "Column" & Text.From(_))),  //去除31号后的空列     工号位置 = List.PositionOf(只保留月份内行[Column1],"工号:",2),  //工号所在行位置     补足工号位数 = List.InsertRange(工号位置,List.Count(工号位置),{List.Last(工号位置)+4}),  //给最后一个工号加2行     员工信息 = Table.SelectColumns(Table.SelectRows(源, each ([Column1] = "工号:")), List.Transform({"1","3","10","11","17","18"},each "Column" & _)),     添加索引 = Table.AddIndexColumn(员工信息, "索引", 0, 1, Int64.Type),     添加考勤信息 = Table.AddColumn(添加索引, "添加考勤信息", each Table.Transpose(Table.Range(只保留月份内行,补足工号位数{_[索引]}+1,补足工号位数{_[索引] +1}-补足工号位数{_[索引]}-1))),  //取得考勤信息     展开考勤信息 = Table.ExpandTableColumn(添加考勤信息, "添加考勤信息", {"Column1", "Column2", "Column3"}, {"添加考勤信息.Column1", "添加考勤信息.Column2", "添加考勤信息.Column3"}),     拆分1 = Table.SplitColumn(展开考勤信息, "添加考勤信息.Column2", Splitter.SplitTextByDelimiter("#(lf)", QuoteStyle.Csv), {"添加考勤信息.Column2.1", "添加考勤信息.Column2.2"}),     拆分2 = Table.SplitColumn(拆分1, "添加考勤信息.Column3", Splitter.SplitTextByDelimiter("#(#)(lf)", QuoteStyle.Csv), {"添加考勤信息.Column3.1", "添加考勤信息.Column3.2"}),     删除的列 = Table.RemoveColumns(拆分2,{"Column1","Column10","Column17","Column18","索引"}),     重命名的列 = Table.RenameColumns(删除的列,{{"Column3", "工号"}, {"Column11", "姓名"}, {"添加考勤信息.Column1", "日期"}, {"添加考勤信息.Column2.1", "时间01"}, {"添加考勤信息.Column2.2", "时间02"}, {"添加考勤信息.Column3.1", "时间03"}, {"添加考勤信息.Column3.2", "时间04"}}) in     重命名的列

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-1-12 15:57 | 显示全部楼层
let
    源 = Excel.Workbook(File.Contents("C:\Users\Mitu\Downloads\员工刷卡记录表9月\员工刷卡记录表9月.xlsx"), null, true)[Data]{0},
    只保留月份内行 = Table.SelectColumns(源, List.Transform({1..31},each "Column" & Text.From(_))),  //去除31号后的空列
    工号位置 = List.PositionOf(只保留月份内行[Column1],"工号:",2),  //工号所在行位置
    补足工号位数 = List.InsertRange(工号位置,List.Count(工号位置),{List.Last(工号位置)+4}),  //给最后一个工号加2行
    员工信息 = Table.SelectColumns(Table.SelectRows(源, each ([Column1] = "工号:")), List.Transform({"1","3","10","11","17","18"},each "Column" & _)),
    添加索引 = Table.AddIndexColumn(员工信息, "索引", 0, 1, Int64.Type),
    添加考勤信息 = Table.AddColumn(添加索引, "添加考勤信息", each Table.Transpose(Table.Range(只保留月份内行,补足工号位数{_[索引]}+1,补足工号位数{_[索引] +1}-补足工号位数{_[索引]}-1))),  //取得考勤信息
    展开考勤信息 = Table.ExpandTableColumn(添加考勤信息, "添加考勤信息", {"Column1", "Column2", "Column3"}, {"添加考勤信息.Column1", "添加考勤信息.Column2", "添加考勤信息.Column3"}),
    拆分1 = Table.SplitColumn(展开考勤信息, "添加考勤信息.Column2", Splitter.SplitTextByDelimiter("#(lf)", QuoteStyle.Csv), {"添加考勤信息.Column2.1", "添加考勤信息.Column2.2"}),
    拆分2 = Table.SplitColumn(拆分1, "添加考勤信息.Column3", Splitter.SplitTextByDelimiter("#(#)(lf)", QuoteStyle.Csv), {"添加考勤信息.Column3.1", "添加考勤信息.Column3.2"}),
    删除的列 = Table.RemoveColumns(拆分2,{"Column1","Column10","Column17","Column18","索引"}),
    重命名的列 = Table.RenameColumns(删除的列,{{"Column3", "工号"}, {"Column11", "姓名"}, {"添加考勤信息.Column1", "日期"}, {"添加考勤信息.Column2.1", "时间01"}, {"添加考勤信息.Column2.2", "时间02"}, {"添加考勤信息.Column3.1", "时间03"}, {"添加考勤信息.Column3.2", "时间04"}})
in
    重命名的列
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-5-7 04:56 , Processed in 0.039908 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表