Python-Excel 模块哪家强?

 

0. 前言

从网页爬下来的大量数据需要清洗?
成堆的科学实验数据需要导入 Excel 进行分析?
有成堆的表格等待统计?
作为人生苦短的 Python 程序员,该如何优雅地操作 Excel?
 
得益于前人的辛勤劳作,Python 处理 Excel 已有很多现成的轮子,使用较多的有:
xlwings
openpyxl
pandas
win32com
xlsxwriter
DataNitro
xlutils
 
上次我们介绍了下 xlutils,不少读者留言表示有比它更好使的模块,于是我们又把另外几个都体验了一遍。
本文将从运行环境、文档操作、基本功能和性能等方面对以上模块进行一次粗浅的比较,供大家参考。
 
 

1. 环境配置

再好的模块,也需要在正确的 Python 版本以及 Excel 版本才可运行。
提醒及注意:
  • xlutils 仅支持 xls 文件,即2003以下版本;
  • win32com 与 DataNitro 仅支持 windows 系统;
  • xlwings 安装成功后,如果运行提示报错“ImportError: no module named win32api”,请再安装 pypiwin32 或者 pywin32 包;(pip install pypiwin32)
  • win32com 不是独立的扩展库,而是集成在其他库中,安装 pypiwin32 或者 pywin32 包即可使用;
  • DataNitro 是 Excel 的插件,安装需到官网下载。
 
 

2. 文档操作

虽然大家都是操作 Excel,但即使最基本的新建文件、修改文件、保存文件等功能,在不同的库中也存在差异。比如 xlsxwriter 并不支持打开或修改现有文件,xlwings 不支持对新建文件的命名,DataNitro 作为 Excel 插件需依托于软件本身,pandas 新建文档需要依赖其他库等等。
 

3. 基本功能

由于设计目的不同,每个模块通常着重于某一方面功能,各有所长。
xlwings
可结合 VBA 实现对 Excel 编程,强大的数据输入分析能力,同时拥有丰富的接口,结合 pandas/numpy/matplotlib 轻松应对 Excel 数据处理工作。
openpyxl
简单易用,功能广泛,单元格格式/图片/表格/公式/筛选/批注/文件保护等等功能应有尽有,图表功能是其一大亮点,缺点是对 VBA 支持的不够好。
pandas
数据处理是 pandas 的立身之本,Excel 作为 pandas 输入/输出数据的容器。
win32com
从命名上就可以看出,这是一个处理 windows 应用的扩展,Excel 只是该库能实现的一小部分功能。该库还支持 office 的众多操作。需要注意的是,该库不单独存在,可通过安装 pypiwin32 或者 pywin32 获取。
xlsxwriter
拥有丰富的特性,支持图片/表格/图表/筛选/格式/公式等,功能与openpyxl相似,优点是相比 openpyxl 还支持 VBA 文件导入,迷你图等功能,缺点是不能打开/修改已有文件,意味着使用 xlsxwriter 需要从零开始。
DataNitro
作为插件内嵌到 Excel 中,可完全替代 VBA,在 Excel 中使用 python 脚本。既然被称为 Excel 中的 python,协同其他 python 库亦是小事一桩。然而,这是付费插件...
xlutils
基于 xlrd/xlwt,老牌 python 包,算是该领域的先驱,功能特点中规中矩,比较大的缺点是仅支持 xls 文件。
 
 

4.性能

我们对几个库做了最基本的写入和读取测试,分别使用不同库进行添加及读取 1000行 * 700列 数据操作,得到所用时间,重复操作取平均值。另外在不同的电脑配置,不同的环境下结果肯定会有出入,数据仅供参考。
注:
  • xlutils 最多只能写入 256 列,即 1000*256,用时3.8秒,表现不错;
  • DataNitro 与 xlsxwriter 不能打开 Excel 文件。
 
 

5. 小结

通过以上的分析,相信大家对几个库都有了简单的了解。在编写文章的过程中,笔者也在思考各个库最适合的应用场景。
  • 不想使用 GUI 而又希望赋予 Excel 更多的功能,openpyxl 与 xlsxwriter,你可二者选其一;
  • 需要进行科学计算,处理大量数据,建议 pandas+xlsxwriter 或者 pandas+openpyxl;
  • 想要写 Excel 脚本,会 Python 但不会 VBA 的同学,可考虑 xlwings 或 DataNitro;
  • 至于 win32com,不管是功能还是性能都很强大,有 windows 编程经验的同学可以使用。不过它相当于是 windows COM 的封装,自身并没有很完善的文档,新手使用起来略有些痛苦。
 
你可根据自己的需求和生产环境,选择合适的 Python-Excel 模块。
 
 

6. 代码示例

最后,附上一些演示代码,大家可自行体会下不同模块的使用。
6.1 xlwings基本代码
import xlwings as xw#连接到excelworkbook = xw.Book(r'path/myexcel.xlsx')#连接excel文件#连接到指定单元格data_range = workbook.sheets('Sheet1').range('A1')#写入数据data_range.value = [1,2,3]#保存workbook.save()
6.2 xlsxwriter基本代码
import xlsxwriter as xw#新建excelworkbook = xw.Workbook('myexcel.xlsx')#新建工作薄worksheet = workbook.add_worksheet()#写入数据worksheet.wirte('A1',1)#关闭保存workbook.close()
6.3 xlutils基本代码import xlrd #读取数据
import xlwt #写入数据import xlutils #操作excel#----xlrd库#打开excel文件workbook = xlrd.open_workbook('myexcel.xls')#获取表单worksheet = workbook.sheet_by_index(0)#读取数据data = worksheet.cell_value(0,0)#----xlwt库#新建excelwb = xlwt.Workbook()#添加工作薄sh = wb.add_sheet('Sheet1')#写入数据sh.write(0,0,'data')#保存文件wb.save('myexcel.xls')#----xlutils库#打开excel文件book = xlrd.open_workbook('myexcel.xls')#复制一份new_book = xlutils.copy(book)#拿到工作薄worksheet = new_book.getsheet(0)#写入数据worksheet.write(0,0,'new data')#保存new_book.save()
6.4 win32com基本代码
import win32com.client as wc#启动Excel应用excel_app = wc.Dispatch('Excel.Application')#连接excelworkbook = excel_app.Workbooks.Open(r'e:/myexcel.xlsx' )#写入数据workbook.Worksheets('Sheet1').Cells(1,1).Value = 'data'#关闭并保存workbook.SaveAs('newexcel.xlsx')excel_app.Application.Quit()
6.5 openpyxl基本代码
import openpyxl# 新建文件workbook = openpyxl.Workbook()
# 写入文件sheet = workbook.activesheet['A1']='data'# 保存文件 workbook.save('test.xlsx')
6.6 DataNitro基本代码
#单一单元格赋值Cell('A1').value = 'data'#单元区域赋值CellRange('A1:B2').value = 'data'

【xlwings1】Python-Excel 模块哪家强的更多相关文章

  1. Python-Excel 模块哪家强 #华为云·寻找黑马程序员#

    python操作excel 最原始的莫过于两位老牌黄金搭档xlrd xlwt了,针对二者的封装有如下模块: xlutils & xlrd & xlwt 为什么把这三个一起说? 首先,x ...

  2. Python 依赖库管理哪家强?pipreqs、pigar、pip-tools、pipdeptree 任君挑选

    在 Python 的项目中,如何管理所用的全部依赖库呢?最主流的做法是维护一份"requirements.txt",记录下依赖库的名字及其版本号. 那么,如何来生成这份文件呢?在上 ...

  3. 201806 数据处理 SQL、python、shell 哪家强...速度PK(上篇)

    最近在工作中,进行大量的数据处理,使用的是mysql5.7.22,发现当数据量级达到几十万之后,SQL执行速度明显变慢.尤其是当多个表join时,于是就尝试用python pandas进行数据处理,发 ...

  4. python中常⽤的excel模块库

    python中常用的excel模块库&安装方法 openpyxl openpyxl是⼀个Python库,用于读取/写⼊Excel 2010 xlsx / xlsm / xltx / xltm⽂ ...

  5. python 写 excel 模块 : xlwt

    主要来自:[ python中使用xlrd.xlwt操作excel表格详解 ] 为了方便阅读, 我将原文两个模块拆分为两篇博文: [ python 读 excel 模块: xlrd ] [ python ...

  6. python 读 excel 模块: xlrd

    主要来自:[ python中使用xlrd.xlwt操作excel表格详解 ] 为了方便阅读, 我将原文两个模块拆分为两篇博文: [ python 读 excel 模块: xlrd ] [ python ...

  7. python自动化--模块操作之re、MySQL、Excel

    一.python自有模块正则 import re # re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None print(re.match("www ...

  8. python xlrd 模块(获取Excel表中数据)

    python xlrd 模块(获取Excel表中数据) 一.安装xlrd模块   到python官网下载http://pypi.python.org/pypi/xlrd模块安装,前提是已经安装了pyt ...

  9. 自动化冒烟测试 Unittest , Pytest 哪家强?

    前言:之前有一段时间一直用 Python Uittest做自动化测试,觉得Uittest组织冒烟用例比较繁琐,后来康哥提示我使用pytest.mark来组织冒烟用例 本文讲述以下几个内容: 1.Uni ...

随机推荐

  1. Cmd使用方式--命令行运行程序

    工具用惯却不知道如何去描述什么用,总感觉自己学东西用东西零零散散不系统,心虚!下面总结下自己使用cmd的几种方式. 1 => cmd,command,是window系统下命令提示符,是一种com ...

  2. 使用 JDK11 遇到的问题

    1.下载的 JDK 解压版中没有 jre 目录以及相应的包,需要通过命令自动生成 进入 JDK 的 bin 目录下,执行以下命令,然后会在 bin 目录下生成一个 jre 目录,需要将该 jre 目录 ...

  3. Luogu P2717 寒假作业(平衡树)

    P2717 寒假作业 题意 题目背景 \(zzs\)和\(zzy\)正在被寒假作业折磨,然而他们有答案可以抄啊. 题目描述 他们共有\(n\)项寒假作业.\(zzy\)给每项寒假作业都定义了一个疲劳值 ...

  4. angularjs 1 Failed to read the 'selectionStart' property from 'HTMLInputElement':

    在找angularjs input(type='number')在获取焦点的时候,文本框内容选中效果,参考了:Select text on input focus,我直接复制他的code之后,在ion ...

  5. 查看java资源的占用

    1,使用命令top -p <pid> ,显示你的java进程的内存情况,pid是你的java进程号,比如1232,按H,获取每个线程的内存情况3,找到内存和cpu占用最高的线程pid,比如 ...

  6. day3-编码、文件、集合、函数、递归

    学习内容: 1. 文件编码 2. 文件 3. 集合 4.函数 5.递归 6.匿名函数 1. 文件编码: 常见的字符串编码有:ASCII 扩展的ASCII Unicode GBK GB2312 GB18 ...

  7. 洛谷P3694 邦邦的大合唱

    题目背景 BanG Dream!里的所有偶像乐队要一起大合唱,不过在排队上出了一些问题. 题目描述 N个偶像排成一列,他们来自M个不同的乐队.每个团队至少有一个偶像. 现在要求重新安排队列,使来自同一 ...

  8. 关于H5裁剪图片后,直传阿里云的一些问题

    这段时间在工作中碰到一个需要在h5裁剪图像,然后直传阿里云的需求.图中遇到了一些小问题,分享出来大家都看看. h5裁剪图像:cropper.js是一个神器啊关于用法,网上可以收罗出大量的帖子,这里我就 ...

  9. P1985 [USACO07OPEN]翻转棋

    题目链接: 翻转棋 题目分析: 先状压/\(dfs\)枚举第一排状态,然后在每个\(1\)下面翻,即确定了第一排就确定了后面的状态 最后验证一下最后一排是不是全0即可 代码: #include< ...

  10. Ajax4Jsf 简单介绍

    Ajax4jsf 允许开发人员将 Ajax 功能添加到 JSF 应用程序中,而不需要 JavaScript 或用 Ajax 图形部件替换现有的组件.这个包还允许在使用 Java 2D 库时动态地生成图 ...