r如何读取excel数据:优先用openpyxl适配.xlsx本地文件
上周加班处理台账,对着一百多条门店销售表卡了整整两小时,才摸透r如何读取excel数据最省事,之前照搬网上通用代码全是无效操作。
最先随手装了readxl包,直接敲read_excel调用文件路径,跑代码直接爆红报错。控制台只提示路径无法识别,没有多余说明,翻了二十分钟论坛才发现,不是代码写错了,是文件夹名称带了中文空格。之前从来没留意过这种细碎问题,一直默认r能自动兼容系统中文路径,白白浪费了大半时间。
路径复制粘贴最容易出问题。
从资源管理器直接复制的地址,自带系统隐藏的全角空格,肉眼完全分辨不出来。手动手打路径替换空格后,readxl终于能读出表格表头,但新问题紧跟着出现:表格里合并了单元格,读取后空白行全部错乱,A列数据直接偏移到C列。
折腾好久才搞明白,readxl原生不兼容合并单元格,不管是横向还是纵向合并,都会打乱索引。当时懒得拆解合并单元格,直接换了openpyxl引擎读取,调用语句只多了一个engine参数,代码就一行:read_excel("门店台账.xlsx",engine="openpyxl")。没有额外配置环境,不用更新依赖包,跑完之后所有偏移数据全部归位,合并单元格的空白区域也统一填充为NA,后续筛选数据不用二次清洗。
隔壁工位同事的做法完全不一样。他习惯用xlsx包读取excel,每次都要先手动关闭后台所有excel进程,不然一定会报文件占用错误。上周他读取同一份台账,因为忘记关闭最小化的excel窗口,连续五次运行失败,最后重启了Rstudio才解决。反观readxl+openpyxl的组合,就算excel文件处于打开编辑状态,也能正常读取,不会触发文件锁定冲突。
还有一个极易忽略的人为疏漏,我之前连续踩了两次。本地下载的excel,浏览器会自动给文件名末尾加(1)、(2)后缀,肉眼扫一眼觉得文件名没错,实际代码读取始终提示文件不存在。第一次排查了四十分钟,才发现是后缀没删掉。而且r识别文件大小写严格区分,台账.XLSX和台账.xlsx是两个独立文件,windows系统看不出区别,代码会直接判定缺失。
上周处理完台账关闭Rstudio的时候,鼠标无意识点到了清空工作区,之前调试好的读取代码没保存。隔天重新开工,又把路径空格的错误复刻了一遍。
盯着控制台重复的报错弹窗愣了三分钟,什么都没改,只是把路径重新手打了一遍。