Excel正则表达式,或导出到Python&引用;“Vlookup”;用Python?

Excel正则表达式,或导出到Python&引用;“Vlookup”;用Python?,excel,python,regex,vba,Excel,Python,Regex,Vba,我们有一个Excel文件和一个包含人员记录的工作表 一,。电话号码 其中一个字段是电话号码字段,其中包含的电话号码格式如下: +XX(Y)ZZZZ-ZZZZ (其中X、Y和Z是整数) 还有一些数字较少的记录,例如: +XX(Y)ZZZ-ZZZZ 还有一些格式非常糟糕: +XX(Y)ZZZZ-ZZZZ / ZZZZ 或: 我们需要将这些内容整理成以下格式: 0YZZZZZZZZ (or OYZZZZZZ with those with less digits). 二,。填写主管详细信息 每

我们有一个Excel文件和一个包含人员记录的工作表

一,。电话号码

其中一个字段是电话号码字段,其中包含的电话号码格式如下:

+XX(Y)ZZZZ-ZZZZ
(其中X、Y和Z是整数)

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

+XX(Y)ZZZ-ZZZZ
还有一些格式非常糟糕:

+XX(Y)ZZZZ-ZZZZ / ZZZZ
或:

我们需要将这些内容整理成以下格式:

0YZZZZZZZZ (or OYZZZZZZ with those with less digits).
二,。填写主管详细信息

每个人也有一个主管,以数字ID的形式给出。我们需要进行查找,以获得该主管的姓名和电子邮件地址,并将其添加到行中

此查找将首先在同一工作表上进行(即搜索本身),然后可以回退到另一个有更多人的工作簿

三,。接近

对于第一个问题,我考虑以某种方式使用Excel/VBA中的正则表达式来进行解析。我的Excel fu不是最好的,但我想我可以学习…哈哈。关于这一点有什么特别的意见吗

但是,我是否最好将XLS导出为CSV(例如使用xlrd),然后使用Python修复电话号码

对于第二种方法,我想在Excel中使用vlookups,以获取数据,然后以某种方式使其失败,首先搜索自身,然后搜索外部工作簿,然后输入错误文本。我不知道最后一部分该怎么做

然而,如果我碰巧选择导出到CSV并用Python实现,那么使用vlookup的有效方法是什么?(我应该转换成dict,还是只是迭代?还是有更好、更惯用的方法?)

干杯,
Victor

如果您选择VBA路线,您可能需要付费查看。如果您选择Python路径,您可以尝试解析到CSV,或者,也可以只操作内存中的内容并通过XLWT进行写入(这是我首选的技术)。您也可以考虑使用COM调用直接修改Excel数据。最后,如果您致力于在Excel之外完成这项工作,您可以看看Jython和。不是最轻量级的解决方案,但POI是我所知道的功能最完整的库,它不依赖于在Windows上运行


正如其他人在评论中所观察到的那样,对于这样一个宽泛的问题很难具体化。希望这里能让你开始…

一般来说,避免使用Excel公式;使用xlrd提取您需要的数据,然后忘记它来自Excel,并使用Python操作数据。例如,解决xlrd/vlookup问题:最好的方法是从包含键和值的两列的相关部分创建一个字典


使用xlrd导出到CSV,然后将其读回是一种浪费时间和丢失有价值的信息(例如Excel单元格中的实际数据类型)。如果您的数据在数据库中,您会将其导出到CSV并将其读回吗?

您的问题空间很大,最好用更直接的问题问多个问题,这样我们可以帮助您。很多决定都可以根据你的喜好来决定。@xyld:嗯,我应该删除这个问题,然后把它分成两个问题吗?无论我选择哪种方法(Python还是Excel/VBA),理想情况下都能处理这两种方法。谢谢,维克多诺·哈姆(VictorNo harm)让它保持开放状态,但可能会回复您对特定方法的特定问题。我已经看过Tushar Mehta的文档(),之前的文档写得非常好。然而,我在如何实际提取我的子组方面遇到了困难-我可以使用RegExpFind来查找某个正则表达式,但是,我不确定如何查找多个表达式组,并将它们全部连接在一起,甚至不确定如何指定我实际要使用的已查找表达式的哪一部分。例如,是否有人知道VBA将上述电话号码+61(2)4534-5453转换为上述结果0245325453。如果我们采用Python方法,我可能会使用xlrd。所以我把这个读入字典,然后在上面搜索?或者,有没有一种更快的方法来实现xlrd中vlookup的等价性?比如,搜索特定的行,然后从该行中拉出特定的列(我知道可以使用xlwt编写Excel公式,但是,如果有,我宁愿采用更具python风格的方法?)
0YZZZZZZZZ (or OYZZZZZZ with those with less digits).