Excel 正则表达式,还是导出到 Python?;Python 中的 "Vlookup"?

0 投票
2 回答
1610 浏览
提问于 2025-04-15 22:21

我们有一个Excel文件,里面有一个工作表记录了人员信息。

1. 电话号码清理

其中有一个字段是电话号码,格式大概是这样的:

+XX(Y)ZZZZ-ZZZZ

(这里的X、Y和Z都是数字)。

还有一些记录的数字位数比较少,比如:

+XX(Y)ZZZ-ZZZZ

还有一些格式非常混乱的:

+XX(Y)ZZZZ-ZZZZ / ZZZZ

或者:

ZZZZZZZZ

我们需要把这些电话号码都整理成统一的格式:

0YZZZZZZZZ (or OYZZZZZZ with those with less digits).

2. 填写主管信息

每个人都有一个主管,用数字ID表示。我们需要查找这个主管的名字和电子邮件地址,并把这些信息加到记录里。

这个查找首先是在同一个工作表上进行(也就是在自己里面查),如果找不到再去另一个工作簿查找更多的人。

3. 方法是什么呢?

对于第一个问题,我在想能不能在Excel/VBA里用正则表达式来解析这些电话号码。我的Excel技能不是很好,但我想我可以学会...哈哈。对此有什么特别的建议吗?

不过,我是不是应该先把Excel文件导出为CSV(比如用xlrd),然后用Python来修复电话号码呢?

对于第二个方法,我在想可以直接在Excel里用vlookup来拉取数据,先在自己里面查找,如果找不到再去外部工作簿查找,最后如果还是找不到就显示错误信息。最后这部分我不太确定怎么做。

不过,如果我选择导出为CSV然后用Python来处理,做vlookup的高效方法是什么呢?(我应该把数据转换成字典,还是直接遍历?或者有没有更好的、更符合习惯的方法?)

谢谢,
Victor

2 个回答

0

如果你选择用VBA来解决问题,可以看看Tushar Mehta的文档。如果你选择用Python的话,可以尝试把数据解析成CSV格式,或者直接在内存中处理数据,然后用XLWT写入Excel(这是我更喜欢的方法)。你也可以考虑直接通过COM调用来修改Excel的数据,参考一下这个链接。最后,如果你想在Excel之外进行操作,可以看看Jython和Apache POI。虽然这不是最轻量级的解决方案,但POI是我知道的最完整的库,它不需要在Windows上运行。

正如其他人评论中提到的,这个问题范围很广,具体的答案很难给出。希望这里的内容能帮助你入门……

2

一般来说,尽量不要使用Excel公式;可以用xlrd这个工具来提取你需要的数据,然后就把它当成普通的数据来用Python处理。比如说,关于xlrd和vlookup的问题,最好的办法是从包含关键字和对应值的两列中,创建一个字典,这样只需要做一次。

用xlrd导出数据到CSV格式,然后再读回来,这样做既浪费时间,又会丢失一些重要信息(比如Excel单元格里的数据类型)。如果你的数据在数据库里,你会把它导出成CSV再读回来吗?

撰写回答