![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=1739346294-90WHc4KWL1qDI70Ib0cTN3dGHdRDiUQY-0-a1bd12a9c63e2993306aed01491691e5)
在Python程序中,可使用pyexcel模块操作Excel和CSV文件,在使用pyexcel之前需要先安装pyexcel_xls,安装命令如下所示。
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/111_03.jpg?sign=1739346294-05LnYtrenSD232MgpsoNzAPsHdFeYVho-0-f1b1c6e40c1d8e4b0579890447590289)
通过如下命令安装pyexcel。
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/111_04.jpg?sign=1739346294-EIc4Wz9q9RyLpwz6reFwarLybCAOdM2L-0-bd20a0f339168f4ea9db395678a7946c)
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=1739346294-BEuaiQDOL3VzAR8i1yzxFcE8gpmyjZp0-0-490cb9153406818f65e4c87889ea5822)
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/112_01.jpg?sign=1739346294-4zIHqx9XBOMwJGHm9hz9dKoR6MuKPoej-0-f4216d79e7aaddfe90be10925a762a5d)
在上述代码中,首先读取了文件example.csv中的内容,然后将指定的数据写入新建CSV文件tab_example.csv中。执行后的效果如图4-7所示。
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/112_02.jpg?sign=1739346294-MTccm0E8n8nvI2LbKgXRdOaJJNLLWMdH-0-90830bef15a5421abd2d3b90c5f518d2)
图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=1739346294-uv8vEIOwFn2IScrwillgrm9iyDVEbvva-0-65f5d5b8ccc6a3adfbc4c899f32aa01a)
执行后的效果如图4-8所示。
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/113_01.jpg?sign=1739346294-pomH6vQ7Ijq1HhtyZWg4RjOvM6cgeLOP-0-270211638fc6e9144410a8655a351447)
图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=1739346294-43C4vLD6531AJdGp29h5KMIBMZo9n7vV-0-02ae7fc2f887b07e6a29dc8b868e93e4)
执行后的效果如图4-9所示。
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/113_03.jpg?sign=1739346294-WB2Q1fzYmyM5VODP6Jqh87lGjRx5YM4c-0-47693c29799038138efd5dcbc8e3d92a)
图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=1739346294-6Q7UgzTIaBPyFUn8WRv09vqLHL5ADtps-0-bdeaa69f793f596f785379e2da13a83d)
图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=1739346294-nJoY9nvaM8QQGbSeqqM8MSOTGih0fFRY-0-d5159e0ccb12095881a59a9e3069b68d)
执行后会输出:
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/114_03.jpg?sign=1739346294-GdlktTUyase0CPuPVeh0glqVrd8tHN0g-0-135b29465b59efc34bb199599f537660)
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=1739346294-MlYWtqDmYvJGw3JeKy9Fjohf0nsEgYSv-0-50bbd8e6e347ae6354f6e3ec3563f8de)
执行后会创建拥有3个Sheet的Excel文件,如图4-11所示。
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/115_02.jpg?sign=1739346294-pQs5WyKfYM2v9eQbMvRtpVAIZbjBMiEt-0-917a83ca5ac8ae1e68738acd130649a4)
图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=1739346294-EyCpnKxU6V88kTu7iix005KjpKpWHL8q-0-3a3398c6ac4aa6dfc9c7b8a4a6802a57)
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/116_01.jpg?sign=1739346294-eRMen2hgiZF1a2jTMXsfRclDg2cHNl4u-0-d9f06888e89e7d55031fc21ece00cd70)
通过上述代码以多种方式获取了Excel中的数据,包括一维数组顺序和逆序、二维数组顺序和逆序。执行后会输出:
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/116_02.jpg?sign=1739346294-sytIIHraBT3Ctipi3KN4SNomWbiQMLYN-0-891623939b288cf47066d260bdd9ecd6)
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=1739346294-7mhNiIaIi39pwEx9fZBuHMoj1yAlCaLB-0-9e6d1a113537fcdafed1cb48d1d34974)
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/117_01.jpg?sign=1739346294-HxnGRkbb73gKXvnb1VMqQ6mBr4OEj9qQ-0-60bcc664da7291bbead7b7d8097fc84f)
执行后会输出:
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/117_02.jpg?sign=1739346294-Fl6glueFXeKElzaIv5MMngqPNK8bm7Fq-0-2d9d5ed352b007b3a0ff5c409963ddfe)
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=1739346294-FCpFSJsPBcfxPxDwtXw3gjxVYwa7Lmxv-0-fed85d8cc1a15a146765dd5070ecb570)
2)编写模板文件upload.html实现了文件上传界面效果,具体实现代码如下所示。
源码路径:daima\4\4-2\memoryfile\templates\upload.html
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/119_01.jpg?sign=1739346294-MwnrxVa84XKlhwOvZUI2AabqxGXXcH1F-0-9dcd71a7f8266071457f74fb048f82dd)
在运行本实例程序之前确保已经安装gunicorn,然后通过如下命令运行本程序。
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/119_02.jpg?sign=1739346294-bdJtUX1dCd43TvETpCd85O2z8avb2RO0-0-0ba1114df6f12c95fb4db70178257a2b)
在浏览器中输入“http://127.0.0.1:5000/upload”后会显示文件上传界面,如图4-12所示。
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/119_03.jpg?sign=1739346294-zk7Qhfk7k6YDk3wGenGvnSuAgwRB8u1L-0-99a9ca0f9de01927c3a479edc5a52cf3)
图4-12 文件上传界面
单击“选择文件”按钮后选择一个上传文件,单击upload按钮后将在页面中显示上传文件的JSON格式数据,如图4-13所示。
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/119_04.jpg?sign=1739346294-0irm9t1EW5gB9GDx06Zgz6O8BGfuFGRW-0-4f42b5cd73c49e59d0d44f5fc5d783f6)
图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=1739346294-2CFy4H99PdaJn9S0HDdGYozS810cP40s-0-b7b3241f072ec46d4fb7c13d3dab566f)
图4-14 下载指定文件export.csv