![Python数据分析从入门到精通](https://wfqqreader-1252317822.image.myqcloud.com/cover/705/33643705/b_33643705.jpg)
4.3 使用pyexcel处理Office文件
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/111_02.jpg?sign=1739349400-5vfbOvoUxsG6f6D144Ijvl5OKOp1dE3i-0-cd86631d830f71783fc64803e778a4e4)
在Python程序中,可使用pyexcel模块操作Excel和CSV文件,在使用pyexcel之前需要先安装pyexcel_xls,安装命令如下所示。
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/111_03.jpg?sign=1739349400-Agjj6AiH9IhkWg49CKXLvSeVuq52m6AN-0-e49c20adfcbade8ad478d776baa38b5d)
通过如下命令安装pyexcel。
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/111_04.jpg?sign=1739349400-aaMEaCNKZ8LeyDn3MYTw0BiYchFipfDh-0-3e8c82720e3cc3be47390c6fbb6b3b11)
4.3.1 使用pyexcel读取并写入CSV文件
在下面的实例文件office05.py中,演示了使用pyexcel读取并写入CSV文件的过程。
源码路径:daima\4\4-3\office05.py
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/111_05.jpg?sign=1739349400-tKwIDEkNm3UzeZutmj5xH9nWUBi5O0QX-0-4df5ee4ee0d4bc4e8f94a8ae84a595cc)
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/112_01.jpg?sign=1739349400-Tqeuurw7XKZ1OjOLWecFdF1TsGykYbpN-0-5714a35ff2c5fff05ebdf9f2690827e2)
在上述代码中,首先读取了文件example.csv中的内容,然后将指定的数据写入新建CSV文件tab_example.csv中。执行后的效果如图4-7所示。
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/112_02.jpg?sign=1739349400-4dSbxxzkJiVtgNRoWPr7QxUZg44hxaSi-0-89103af03d25d1fa563739770c21cc66)
图4-7 执行效果
4.3.2 使用pyexcel读取指定Excel文件中每个单元格数据
在下面的实例文件read_cell_by_cell.py中,演示使用pyexcel读取指定Excel文件中每个单元格数据的过程。
源码路径:daima\4\4-3\read_cell_by_cell.py
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/112_03.jpg?sign=1739349400-d9MtHfgLNdGlfHcOUcER4kMQuwHbbmgA-0-bbeb4a0d2554108b6b54c794669fae81)
执行后的效果如图4-8所示。
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/113_01.jpg?sign=1739349400-H15T5U0ogZ0ymH9HzUcizCp9Er7NbgvL-0-e572dfa98121196dcbcef156017e4cfe)
图4-8 执行效果
4.3.3 按列读取并显示指定Excel文件中每个单元格数据
在下面的实例文件read_column_by_column.py中,演示了使用pyexcel按列读取并显示指定Excel文件中每个单元格数据的过程。
源码路径:daima\4\4-3\read_column_by_column.py
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/113_02.jpg?sign=1739349400-dFyQQsCwEL0fdsk7DbGKvHmjNwqazIRF-0-f0198d8fcdf6c4fc0c7b3babeecebf97)
执行后的效果如图4-9所示。
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/113_03.jpg?sign=1739349400-XaJuABKrw9OfHzUNjxLBPuOouoNkSV55-0-eecd05ce808f5094743bb70b7940ad9c)
图4-9 执行效果
4.3.4 读取显示Excel文件中的所有数据
如果在一个Excel文件中有多个Sheet,如文件在multiple-sheets-example.xls中有3个Sheet,里面的数据如图4-10所示。
通过下面的实例文件read_excel_book.py,可以读取显示上述multiple-sheets-example.xls文件中的所有数据。
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/114_01.jpg?sign=1739349400-GKUXgAvWatZT9XhWt5dtPTizjlTx7aNO-0-24175e7e098ce63f96d76cd45ceb7fb4)
图4-10 3个Sheet
源码路径:daima\4\4-3\read_excel_book.py
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/114_02.jpg?sign=1739349400-afvhAroFdJX5H5VYf6GtrwK1omZeMHid-0-8bedca91eb28a295e5307c761c85a8e6)
执行后会输出:
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/114_03.jpg?sign=1739349400-k1KN7z7veUvDfyL7iJ08scsZxUURiHJM-0-20ce6b8e02800756fe07a829ca12463d)
4.3.5 将3组数据导入新建的Excel文件
通过下面的实例文件write_excel_book.py,可以将3组数据导入新建的multiple-sheets1.xls文件中,3组数据分别对应于里面的3个Sheet。
源码路径:daima\4\4-3\write_excel_book.py
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/115_01.jpg?sign=1739349400-m9IwmUyP4MhIBF7TaJ9HJg1Wy5VY01zB-0-0d812d694228d7c1a270f5a20cd586ea)
执行后会创建拥有3个Sheet的Excel文件,如图4-11所示。
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/115_02.jpg?sign=1739349400-J7NADOyFhT4JlTEbyd5lKFcqg9Uo24Ro-0-a663214f7ec217c38e9a3cdab70c4431)
图4-11 创建的Excel文件
4.3.6 以多种方式获取Excel数据
在下面的实例文件series.py中,演示了使用pyexcel以多种方式获取Excel数据的过程。
源码路径:daima\4\4-3\series.py
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/115_03.jpg?sign=1739349400-vVQfHsGAT5QMjyUOUZc63UeNCra7tWOl-0-8d2caa1ab8e99f1d0864e233cc3f20ba)
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/116_01.jpg?sign=1739349400-ZfbDun5e58HIJQ9Mp8mrIEshkAVj5GWx-0-c810c23a01a6d99d5a1018c6c9dec3b1)
通过上述代码以多种方式获取了Excel中的数据,包括一维数组顺序和逆序、二维数组顺序和逆序。执行后会输出:
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/116_02.jpg?sign=1739349400-Ba7XLGR0Jdz63No9ypxY5mSVRB5PpW7k-0-d48b9ec9e643cc62b4ed2a85678b25cc)
4.3.7 将数据分别导入Excel文件和SQLite数据库
在下面的实例文件import_xls_into_database_via_sqlalchemy.py中,演示了使用pyexcel将数据分别导入Excel文件和SQLite数据库的过程。
源码路径:daima\4\4-3\import_xls_into_database_via_sqlalchemy.py
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/116_03.jpg?sign=1739349400-zQGb8SYDz2by51B1WUpWC1eSrj1gXeJp-0-6a166a54cf0a243efa58d0fbb6142f71)
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/117_01.jpg?sign=1739349400-tsLqObSmIK6Z8IVnih0v5ZSOXBrzrpov-0-2e77a66dce195865c04ed71e0c907f0b)
执行后会输出:
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/117_02.jpg?sign=1739349400-gnX6ZyBWHTf5MJZIvRiCoezMQQTt71ek-0-fc23abd745ce9b44457b859b3a130682)
4.3.8 在Flask Web项目中使用pyexcel处理数据
在下面的实例代码中,演示了在Flask Web项目中使用pyexcel处理数据的过程。
1)编写程序文件pyexcel_server.py,首先通过函数upload()实现文件上传功能,将上传的Excel文件导出为JSON格式显示在页面中;然后定义数据对象data,在里面保存了将要处理的数据;最后通过函数download()实现文件下载功能,使用data对象中的数据生成一个CSV文件并下载下来。文件pyexcel_server.py的具体实现代码如下所示。
源码路径:daima\4\4-3\memoryfile\pyexcel_server.py
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/118_01.jpg?sign=1739349400-82u4UvKAfU8FlIQe3NX7nz4fNuBzMmWt-0-f4b2d959f94f6a99e9c1e68faef4e25b)
2)编写模板文件upload.html实现了文件上传界面效果,具体实现代码如下所示。
源码路径:daima\4\4-2\memoryfile\templates\upload.html
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/119_01.jpg?sign=1739349400-gei2KTvjx3s5VL8Mw0BKIZYEkbbVzF8P-0-42676fcf62a60473c4b7e4c094f731c5)
在运行本实例程序之前确保已经安装gunicorn,然后通过如下命令运行本程序。
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/119_02.jpg?sign=1739349400-eOI24W51Gt18S9jfVLbHtWBrzgARyZw0-0-638c8391d3f5e5e69a299c0c1a813928)
在浏览器中输入“http://127.0.0.1:5000/upload”后会显示文件上传界面,如图4-12所示。
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/119_03.jpg?sign=1739349400-hP2h8Po9wUDeosSKUf03w0LydyzcBiru-0-0fff8ffe2cc234988dc2aeed7a1ac418)
图4-12 文件上传界面
单击“选择文件”按钮后选择一个上传文件,单击upload按钮后将在页面中显示上传文件的JSON格式数据,如图4-13所示。
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/119_04.jpg?sign=1739349400-XX4rK1PkzT8s57lAbWIwxVDQhITIZpPJ-0-b97cea71f711c6ca43c300fca556d569)
图4-13 显示上传文件的JSON格式数据
在浏览器中输入“http://127.0.0.1:5000/download”后,会下载指定的CSV文件export.csv,这个文件中的数据是从data中导入并生成的。执行效果如图4-14所示。
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/120_01.jpg?sign=1739349400-yAG3NLLC3SgxdGhone0XpF21C3NElUdU-0-aa8a357ac9a4849751efbb0dc698520d)
图4-14 下载指定文件export.csv