You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

179 lines
16 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 13Excel插件如何扩展Excel的基本功能
你好,我是尹会生。
我们在讲了怎么利用Python优化Excel的输入和计算效率之后相信你已经知道该怎么使用Python的循环和文件库进行多个文件的处理怎么使用正则表达式对内容进行查找和替换。
但是有时会因为临时的需求为了得到查询的结果而进行一次性的表格处理这时候如果用Python来解决估计你有一种“杀鸡用牛刀”的感觉未免小题大做了。
所以在接下来的三节课里我会利用Excel中自带的插件和更简单的两个脚本工具来完成这种临时的、简单的重复性任务让你用更便捷的方式实现办公自动化。
今天这节课呢我就给你介绍一个在Excel中非常著名的Power Query插件利用这个插件你可以完成我们经常遇到的数据清理工作。
## Power Query的主要用途
我先来介绍一下Power Query这个插件。从它的名字你应该就能猜到它的主要用途那就是**在查询方面对Excel进行优化。**
**我所说的**查询优化是泛指它的涵盖范围比较广。为了方便使用Excel统计数据往往需要在统计数据前去调整Excel表格的格式、内容以及字段类型这些在Excel中统称为**查询操作。**
如果能够把新增数据自动更新到已经处理的数据中还能自动化地按照之前的操作步骤对表格中的数据进行调整这就是Power Query比手动调整Excel更有效率的地方**。**
在查询大量数据中,最耗时的就是清理数据工作了,具体来说,就是把需要统计的数据从多个文件进行提取和合并,把不符合统计格式的数据进行自动化处理,最终形成符合数据统计的规范格式。
比如数据被存储到多个文件里而你需要把多个文件的内容手动合并到一个Excel中。再比如Excel中的日期包含了年月日和具体时间如果要按日期汇总这些数据那你就需要先把年月日和时间拆分。不方便的是如果表格里的数据更新了你就必须要重新再手动拆分一遍。
其实这两个例子,代表了清理数据工作中需要自动化最典型的两个场景,那就是**文件导入和格式调整**。而Power Query 就是优化这两个主要功能的插件。
那怎么用Power Query来优化呢你需要掌握三个主要步骤分别是**获取数据、转换****和****加载**。只要是用Power Query来优化Excel的查询这三个步骤是必须要掌握的。我也再来具体解释一下每个步骤的具体操作。
**获取数据,****指的是把****数据传入Power Query 的过程**。通常我们会新建一个工作簿把Excel打开之后然后再切换到“数据”选项卡。接着单击“获取数据”按钮在下拉菜单中选择“自文件”命令继续在下一级菜单中选择“从文件夹”命令通过弹出的“文件夹”对话框就可以加载文件夹中的所有Excel文件了。具体操作示范如下图。
![](https://static001.geekbang.org/resource/image/d4/b9/d44bd77930eebecc9f5efc5a273b90b9.png?wh=580*500)
转换指的是对数据的清理工作。在这一步你需要把你加载到Power Query中的数据从文件到sheet再从sheet到行列依次处理对合并好的数据再进行添加、删除列、筛选、添加自定义计算等操作。
这一步是把不符合统计需求的数据调整为符合统计需求数据的最主要操作步骤,也是最繁琐的一步。例如把销售代表字段拆分成姓氏和名字,将订单日期的时间字段去掉,就可以使用转换这一操作来完成。
我给你画一幅图,用来帮你直观理解转换前后的变化,图片如下:
![](https://static001.geekbang.org/resource/image/80/3f/803f330abe1cd26244e2e446aefe043f.png?wh=796*234)
第三步是加载指的是把已经清理和转换的数据返回到Excel中。这一步比较简单这里我就不多讲了。
讲完了用Power Query优化Excel查询的三个核心步骤那接下来我就用两个典型案例带你实践一下具体的操作。
## 如何用Power Query优化Excel的查询
我选用了两个不同的案例,覆盖了我在第一部分所说的文件导入和格式调整这两种最经常需要手动操作的场景,这两个场景就是:
1. 把多个文件合并到一个Excel中
2. 把单元格内容调整为统一格式。
那么接下来我就教你怎么使用Power Query加快手工操作Excel的效率。
### 把多个文件合并成一个Excel
把多个文件合并成一个Excel表格是处理大量数据的先决条件。那么涉及到处理大量数据的工作都要进行合并这一步操作。
像是数据被分成多个文件,每个文件里有多个表的情况,在工作中非常常见。如果数据是按月、按天分成不同的工作簿,合并它们是一件更麻烦的事情。
接下来我就以半年的销售数据表格为例分7个步骤来讲解怎么使用Power Query实现多个Excel文件的合并功能。
**第一步,获取数据**。
通过Excel的“数据选项卡”-“获取数据”-“自文件”-“从文件夹”命令,会弹出一个对话框。此时,你可以选中需要合并的文件夹,这样该文件夹内的所有文件都会被识别出来。
由于每个文件中可能会有不同的表不能把它们直接合并。因此我们需要点击“编辑”按钮进入Power Query编辑界面。
这个界面是Power Query 的主要工作界面,在你需要对多个文件进行自动化批量修改时,都需要通过这个界面来完成操作。同时,这个界面也会把你操作的中间结果显示出来。
我们来从左到右依次看一下界面的内容。由于Power Query的界面较大我先把左侧和中间的界面放在下图
![](https://static001.geekbang.org/resource/image/08/3d/0819a366e23ec8d41d9d8b48105efd3d.png?wh=638*306)
界面的中间会显示导入的文件名称和数量文件的内容会保存在Content列中。
另外,我要提醒一下,你还应该关注**左侧和右侧的提示信息**。左侧会显示你进行的多次清理操作,每次清理被称作查询。查询的名字可以在右侧的“查询设置”里进行名称修改,右侧的“应用的步骤”列表还能记录操作历史,如果你认为处理结果不符合期望,那就可以返回上一步,重新调整查询结果。
我把右侧的名称和步骤也贴在下方,供你参考。
![](https://static001.geekbang.org/resource/image/68/fc/688724de2febe3f2f39fc6bcd90f7efc.png?wh=484*380)
第二步我们需要把工作簿中的数据从Content列中解析出来并且添加在现有内容的右侧。
在这里,我们可以使用一个公式来添加新的列。你需要切换到“添加列”选项卡,单击“自定义列”按钮,然后在弹出的对话框中**输入公式“Excel.Workbook(\[Content\],true)** ”, 最后点击确定。
我把添加自定义列的操作图片也放在下方。
![](https://static001.geekbang.org/resource/image/47/21/47a55b6a3b55e87719cbb31508e66621.png?wh=848*577)
可以看到通过自定义列的功能你将会在原有表格的基础上再添加新的一列而这一列的内容是Table表示文件中所有的表格内容。这里有一点你需要注意的那就是自定义列的公式需要区分大小写。
**第三步,****调整每个sheet的每一行****。**
你需要点击第二步添加“自定义”列右侧的数据展开按钮,然后取消勾选“使用原始列名作为前缀”复选框,并点击确定。如图:
![](https://static001.geekbang.org/resource/image/cc/0f/ccaef51292b0137345ee68d53aa91c0f.png?wh=536*349)
**第四步在调整完行之后你还需要调整每个文件中要查询的sheet和列**它们也是以复选框的形式为你展示的。
例如我在每个文件只使用了一个sheet每个sheet中的所有列都需要进行查询所以我就可以选中所有的sheet和列。我把操作截图贴在下面方便你学习。
![](https://static001.geekbang.org/resource/image/a4/cd/a47c30da66798a9dc8d03e943bc28acd.png?wh=391*337)
选择指定的sheet功能你可以点击Item列右侧的下拉菜单勾选需要的sheet。点击确定之后Power Query编辑器界面就会产生新的列即“Data”列。
Data列保存了我们在第二步选中的sheet的所有表格在我们今天的案例中由于我需要所有的列因此我就“选择所有列”并点击“确定”按钮展开Data列这样就得到了我需要查询的数据。
第五步通过上面四个步骤就可以把所有数据按照你需要的sheet、行、列导入到Power Query编辑器了。不过这时编辑器界面还有要处理的中间数据因此我可以通过删除其他列的方式来删除额外的数据。
具体做法是:使用主页选项卡的“删除列”下拉列表,选择“删除其他列”。我把删除前后的截图贴在下方,供你参考。
![](https://static001.geekbang.org/resource/image/af/yy/af3f5251248eee7f7b1441f5ac40a8yy.png?wh=1022*553)![](https://static001.geekbang.org/resource/image/4b/e0/4bfda71f6b10cdb58c1cf00591fb50e0.png?wh=697*568)
第六步由于处理完数据内容后Excel的每一列类型会自动变成文本类型导致最终执行结果显示错误所以我们还需要继续修改类型。可以看到我把“订单日期”改为日期时间类型把销售额改为小数类型。具体修改方式是点击列标题前的类型图标通过弹出的下拉列表选择指定的类型如图所示
![](https://static001.geekbang.org/resource/image/92/ec/92dc79ed1443891514c9788817c492ec.png?wh=648*409)
第七步也是最后一步。我把编辑器的数据保存回Excel中点击“主页”选项卡上的关闭并下载这样就实现了把多个文件合并到一个Excel的功能。
通过这个例子我把Power Query的三个主要处理步骤获取数据、转换和加载分解成了具体的七个操作步骤来编写Power Query的主要流程。这七个步骤其实并不繁琐并且你要是再细心点儿就会发现我是把“转换”这一部分拆解成了五个步骤其他两部分并没有变。
总结来说相比较PythonPower Query不需要编程就能实现多个文件的合并操作也更加简单。而且在每一步操作之后你还能通过图形界面及时观察每一步骤的执行结果这要比Python更加直观也比Python更适用于一次性的多文件合并场景。
Power Query不但在获取数据的时候可以实现自动化查询功能而且在单元格的转换和添加列上也能实现自动化查询功能。那么接下来我就以拆分列功能为例给你演示一下Power Query的转换功能是如何实现自动化查询的。
### 单元格的拆分
拆分列,是自动化查询转换功能时最常用到的选项。例如你在按日期汇总数据时,发现日期这列除了年月日,还包括时间信息,这样就没法按照相同的年月日进行合并,而必须要先对日期单元格进行拆分,拆分之后才能按照年月日这一列汇总数据。
还有,当你需要对销售人员的姓氏、名字分别处理时,也要按照字数对姓名单元格拆开,然后分别处理。
拆分的功能在Excel中也是可以实现的但是Power Query能够在拆分之后对新导入的文件也能通过点击刷新实现自动拆分。那么接下来我就教你怎样在Power Query里使用拆分列功能来拆分日期时间和姓名并在增加文件后实现自动更新。
首先我们需要再次打开Power Query编辑器。你可以在Excel的数据选项卡通过“获取数据”下拉列表选择“启动Power Query编辑器”。
其次你需要在Power Query编辑器选中“转换”选项卡。通过选中“dt\_订单日期”列使用拆分列下拉列表的“按分隔符拆分”按钮把分隔符改为空格后再点击确定这样就可以把订单日期拆分为两个新的列。
最后,删除“小时”这一列后,订单日期就实现了拆分功能。
你看,通过对不必要信息的拆分删除,就可以对列的内容进行自动化调整了。
这里我也再补充一点,除了“按分隔符拆分”外,你还可以按字的个数进行拆分。例如,我把销售代表的“姓名”进行拆分,你可以使用“按字符数拆分列”选项,如下图:
![](https://static001.geekbang.org/resource/image/fc/18/fc7ff3c3dc0b40507e4b44faf3630218.png?wh=1179*668)
通过这张图就可以看到,我通过调整字符数和拆分次数,就把“姓”和“名字”进行了拆分。拆分后的结果如下图,供你参考。
![](https://static001.geekbang.org/resource/image/a9/dc/a9a23ed5d479400285146a2488382cdc.png?wh=639*393)
总结来说,通过日期的拆分,你可以自动化移除字符串中不必要的内容。而通过对姓名的拆分,你可以在后续操作中分别对姓名进行处理。
不过,如果后续有了新的文件,那该怎么在当前执行结果上,再把新的文件进行自动拆分呢?
具体做法是你可以在存放半年销售数据的文件夹中直接放入下一个月的销售数据。只要原始的Excel文件格式和之前的6个文件相同那么当你点击“刷新”按钮后Power Query就会自动加载新的Excel文件并自动把新的数据中的姓名、日期进行拆分。
这样就能实现自动查询的功能,不用重复执行获取数据和转换功能,也大大提高了数据的处理效率。
### 其他功能怎样学习
我利用了文件合并和单元格拆分为你演示了Power Query的工作过程和常见功能。不过Power Query在自动化查询工作中还能实现非常丰富的“转换”、“添加列”功能他们分别在转换和添加列选项卡下如果你需要掌握更多的功能可以参考[官方文档](https://docs.microsoft.com/zh-cn/power-query/)进行学习。
### 小结
在这节课中我使用Power Query实现了多个文件的合并以及单元格的拆分处理为你演示了它的自动化查询功能。
如果你跟着操作下来就会发现Power Query使用了图形界面比Python处理数据更直观。通过Power Query编辑器你可以一边观察处理结果一边调整处理的功能。它的自动化体现在增加新的输入源或新的列通过“刷新”功能都能自动化识别和按照执行过的步骤对新增内容进行自动化处理。
此外Power Query除了使用界面外还支持脚本语言也叫M语言。通过M语言Power Query可以实现功能更丰富的转换和添加列功能M语言也有函数、判断和循环逻辑等脚本语言的语法在你掌握Python之后学习它就更加轻松了。
总结来说Power Query弥补了工作中处理一次性需求的短板它比Excel更自动化比Python更简单为自动化查询工作提供了高效的解决方案。
我把这节课用到的Excel作为附件放在百度云网盘里你可以点击下载提取码为supu。
[合并文件到Excel.rar](https://pan.baidu.com/s/15Og4SfuA5ZanQ5_T5rNhXg)
### 思考题
最后我给你留一道思考题如何在Power Query编辑器中实现统计每个月的销售额以及如何实现每种产品名称半年的销售额统计功能。
欢迎把你的思考和想法写在评论区,我们一起交流讨论。此外,你还可以点击课程详情页的“戳我进群”,扫描二维码,加入我们的课程读者群,我也会在群里为你解疑答惑。