![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=1739064430-IysJB0ewUFYcck00jG5no7idjcHwYSaJ-0-3b12536aec98279047c694acc784225b)
在Python程序中,可使用pyexcel模块操作Excel和CSV文件,在使用pyexcel之前需要先安装pyexcel_xls,安装命令如下所示。
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/111_03.jpg?sign=1739064430-7SGIBn2IT7b0hQEt7cWJbNWMzEtRtvJ1-0-798536f48c5658f34be851ebd66ba17b)
通过如下命令安装pyexcel。
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/111_04.jpg?sign=1739064430-k0nNqKKXYlWvLVYOrGPLSFDP0nFILNjX-0-78037b79da9f25ceb567bd59db4f07c9)
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=1739064430-wXF0kFbejSl2Kl7YNKIks2ouwCMwPxp5-0-ca39ad6b10eada9e876765e2dfe62fef)
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/112_01.jpg?sign=1739064430-b1J0WRZdogflHQLbdj7JV3vsMQ1jrY2E-0-d2414cc41b0f5ea9175d1adf3e51f7b7)
在上述代码中,首先读取了文件example.csv中的内容,然后将指定的数据写入新建CSV文件tab_example.csv中。执行后的效果如图4-7所示。
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/112_02.jpg?sign=1739064430-OVkkdBo1I4aBmdldZojoLBONV0QtYBab-0-d1e3eeed89dc5341feb30507c3ce9d37)
图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=1739064430-waBbbkDG2Lz0pjOwnGnQctL5I9UeBpbN-0-15af8763cb8dfb41d1b94419cdbb9ad6)
执行后的效果如图4-8所示。
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/113_01.jpg?sign=1739064430-HDTbbHyyjlCKMk1xvMfhh76CT3kL91V8-0-d02ac81d3e9fda133846adae3a428312)
图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=1739064430-AWOkdgBt64rtkJ90saKr0WiM9eyaJjaA-0-bae33009e7c2b779ac1ade91a5abad2f)
执行后的效果如图4-9所示。
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/113_03.jpg?sign=1739064430-YHxNm5f9ErQ47M3sDlekqAjF5pJb98MR-0-2b8cde321e816e60f18c70a5c7fa6eca)
图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=1739064430-JQHfMDXVoM8r5urKofVlmUGzRAgsUsDT-0-4e57e740eb40a6625c4e123ae81f55c5)
图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=1739064430-9ak9lnFc9pSLawJhJbsJlUi3GkmJNCcc-0-56cee6c9baaad0b5bd22ded194034f98)
执行后会输出:
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/114_03.jpg?sign=1739064430-4JmSK6WUYFBaJiOYNIyxhJx66yIwSSav-0-944c28ed959255b206f4ff0346c18562)
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=1739064430-I67HwnPcVF6RTdCYGHMHtrjwPzPBiILA-0-d467815bf0dd47f947b767097693bac1)
执行后会创建拥有3个Sheet的Excel文件,如图4-11所示。
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/115_02.jpg?sign=1739064430-tEaXbIsViZzJcftZFd2wvoYXlk6ov0m6-0-219247e3d0e4550d4e638cfa6bd72a74)
图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=1739064430-g2JLbPwWHr2X5AiSzegZqvk2cQRAqlAR-0-1b3c154fd6c988a2f27ef356f7e147d1)
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/116_01.jpg?sign=1739064430-Vsxb2MQsgRyTUIGHkBzt74abqzwK3PrO-0-31571388e390e886a1aa876e5f1c9780)
通过上述代码以多种方式获取了Excel中的数据,包括一维数组顺序和逆序、二维数组顺序和逆序。执行后会输出:
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/116_02.jpg?sign=1739064430-xbXQ8LgnIFRSeXOibmpkN9RytiUvdBMA-0-ec0bb3c6a5a2d0a2947cda9a1f72b1f4)
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=1739064430-rXgEUnQYAIQF85MlYZ68Wk0aZQHmWd7q-0-fc59cbb1ceec29394debc4c6d1804e7b)
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/117_01.jpg?sign=1739064430-CTXmy0fmEu4jC8VpmtSlptxosYxtSwXV-0-fcb395639d35a7a514a3cb59b4782d17)
执行后会输出:
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/117_02.jpg?sign=1739064430-XTlFpPq3oxWvmYttZNyr3HTXk19wpE8d-0-eca1897a6fa3095b9e4e38e6643ec90b)
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=1739064430-iIyk0BE0jxexOsaQMw5M4OJXREHAP1z6-0-ae367115676d03781d1bd6679f320958)
2)编写模板文件upload.html实现了文件上传界面效果,具体实现代码如下所示。
源码路径:daima\4\4-2\memoryfile\templates\upload.html
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/119_01.jpg?sign=1739064430-v76h2njaOSrd5N9Oeeys4QvdWcNdEWDc-0-281ead18737c84807fcec88146740bfb)
在运行本实例程序之前确保已经安装gunicorn,然后通过如下命令运行本程序。
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/119_02.jpg?sign=1739064430-NPrwAqATqFQG4Tk9fKYIfXPSlZYcbvzu-0-a2d6842c8b0e18d9205d5d87d35fd234)
在浏览器中输入“http://127.0.0.1:5000/upload”后会显示文件上传界面,如图4-12所示。
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/119_03.jpg?sign=1739064430-5oKKPwWSgBUARYUe3gF116gzryj5GgFm-0-9ed9b539ee472146a8e667eb5e33ca4d)
图4-12 文件上传界面
单击“选择文件”按钮后选择一个上传文件,单击upload按钮后将在页面中显示上传文件的JSON格式数据,如图4-13所示。
![](https://epubservercos.yuewen.com/3F131D/17977545801605906/epubprivate/OEBPS/Images/119_04.jpg?sign=1739064430-q77j7fCrkUto42b62YvFD4Hjq6DMHhFj-0-3946e433ee6fea2def63f84839e21d2e)
图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=1739064430-u4YUGFsynRSkkJWYxxmUV84d27HKvt2S-0-6cc2d00b921a85870640daf0f636d7b2)
图4-14 下载指定文件export.csv