Python学习之道-处理Excel电子表格
Python学习之道-处理Excel电子表格
一、各个工具对比
XlsxWriter | xlrd&xlwt&xlutils | OpenPyXL | Microsoft Excel API | |
---|---|---|---|---|
介绍 | 可以创建和写Excel 2007+ XLSX文件 | xlrd、xlwt、xlutils三大模块分别提供读、写和其他功能 | 可以读、写Excel 2007+ /xlsm/xltx/xltm文件 | 直接通过COM组件与Microsoft Excel进程通信调用各种功能实现对excel文件操作 |
读 | ✘ | √ | √ | √ |
写 | √ | √ | √ | √ |
修改 | ✘ | √ | ⚠️ | √ |
.xls | ✘ | √ | ✘ | √ |
.xlsx | √ |
|
√ | √ |
大文件 | √ | ✘ | √ | ✘ |
功能 | 强 | 弱 | 一般 | 超强 |
速度 | 快 | 快 | 快 | 超慢 |
系统 | 无限制 | 无限制 | 无限制 | Windows + excel |
使用场景 | 需要创建xlsx文件 * 不需要读取已有文件 * 需要实现比较复杂的功能 * 数据量可能会比较大 * 需要跨平台 | * 需要读取xls或者xlsx文件 * 要生成xls文件 * 需要对文件处理的功能不太复杂 * 需要跨平台 | * 需要处理xlsx文件 * 需要修改已有文件或者在写入过程中不断修改 * 需要对文件处理的功能比较复杂 * 数据量可能会很大 * 需要跨平台 | * 需要处理各种文件格式 * 需要用到特别复杂功能 * 在修改文件时不希望对原有信息造成任何意外破坏 * 数据量很小,或者愿意等待 * 仅在Windows中使用 |
参考文档:
python处理excel总结 - Paul7777 - 博客园
二、OpenPyXL
OpenPyXL是比较综合的一个工具,能读能写能修改,功能还算可以但网上有人说有很大的缺陷。(更多信息请见:http://www.python-excel.org/, https://openpyxl.readthedocs.io/en/stable/index.html)
优点
能读能写能修改
OpenPyXL的工作模式跟XlsxWriter和xlwt有很大的区别,它用的是getter/setter模式。你可以随时读取某个单元格的内容,并根据其内容进行相应的修改,OpenPyXL会帮你记住每个单元格的状态。
特别需要注意的一点:虽然它支持修改已有文件,但由于其所支持的功能有限,读入文件时会忽略掉它所不支持的内容,再写入时,这些内容就丢失了。因此使用时一定要慎重。比如下面的缺点中提到它无法读入公式,那如果你修改一个带有公式的文件,保存之后,所有的公式就都没有了。
功能还算可以
整体来讲,它所支持的功能介于XlsxWriter和xlwt之间。
缺点
不支持XLS
这件事情只能让xlrd和xlwt去做。
不支持读取公式
这其实是个不太简单的事情,虽然我没尝试过,但相信xlrd也做不好这件事。
Excel的单元格如果是一个公式,它内部会同时保存公式本身和运算结果的缓存。用OpenPyXL读取单元格内容,它不会告诉你这个单元格的公式是什么,甚至不会告诉你这个单元格存的是公式,它只会拿到这个缓存的运算结果。我本来想利用它判别单元格是不是用了公式,然后做出不同的处理。结果遇到了这个问题,最后只好采取了其他变通的方式去做。
安装OpenPyXL
运行pip install openpyxl
openpyxl-2.6.2
F:\MyPythonFile>pip install openpyxl
Collecting openpyxl
Downloading https://files.pythonhosted.org/packages/ba/06/b899c8867518df19e242
d8cbc82d4ba210f5ffbeebb7704c695e687ab59c/openpyxl-2.6.2.tar.gz (173kB)
100% |████████████████████████████████| 174k
B 609kB/s
Collecting jdcal (from openpyxl)
Downloading https://files.pythonhosted.org/packages/a0/38/dcf83532480f25284f3e
f13f8ed63e03c58a65c9d3ba2a6a894ed9497207/jdcal-1.4-py2.py3-none-any.whl
Collecting et_xmlfile (from openpyxl)
Downloading https://files.pythonhosted.org/packages/22/28/a99c42aea746e18382ad
9fb36f64c1c1f04216f41797f2f0fa567da11388/et_xmlfile-1.0.1.tar.gz
Installing collected packages: jdcal, et-xmlfile, openpyxl
Running setup.py install for et-xmlfile ... done
Running setup.py install for openpyxl ... done
Successfully installed et-xmlfile-1.0.1 jdcal-1.4 openpyxl-2.6.2
OpenPyXL上手
基本概念
在openpyxl中,主要用到三个概念:Workbooks,Sheets,Cells。Workbook就是一个excel工作表;Sheet是工作表中的一张表页;Cell就是简单的一个格。openpyxl就是围绕着这三个概念进行的,不管读写都是“三板斧”:打开Workbook,定位Sheet,操作Cell。
自己练习的代码
#!/usr/bin/python3
# -*- coding: UTF-8 -*-
from openpyxl import Workbook
#新建表格工作表
wb = Workbook() #创建Workbook对像
print(wb.sheetnames)
sheet = wb.active #获取活动工作表
print(sheet.title)
sheet.title = '工作表1'
print(sheet.title)
print(wb.sheetnames)
#创建和删除工作表
sheet2 = wb.create_sheet()
print(wb.sheetnames)
sheet3 = wb.create_sheet(index = 2,title = '测试数据')
print(wb.sheetnames)
print(sheet3.title)
wb.remove(sheet2)
print(wb.sheetnames)
sheet3['A3'] = 'etwtwetwe'
print(sheet3['A3'])
print(sheet3['A3'].value)
# Data can be assigned directly to cells 数据可以直接分配给单元格
sheet3['A1'] = 42
# Rows can also be appended 还可以添加行
sheet3.append([1, 2, 3])
# Python types will automatically be converted Python类型将自动转换
sheet3['A2'] = datetime.datetime.now()
wb.save("test.xlsx")
wb.close()
from openpyxl import load_workbook
wb = load_workbook("test.xlsx")
print(wb.sheetnames)
wb.create_sheet(index = 1)
print(wb.sheetnames)
#sheet = wb.get_sheet_by_name("测试数据")
sheet = wb["测试数据"]
print(sheet["A"])
print(sheet["1"])
print(sheet["A4"].value) # A4 <-第A4格的值
print(sheet.max_row) # 10 <-最大行数
print(sheet.max_column) # 5 <-最大列数
for i in sheet["A"]:
print(i.value, end=" | ") # <-列中的所有值
i.value = 'FFF'
print ()
for i in sheet["A"]:
print(i.value, end=" | ") # <-列中的所有值
for i in range(10):
sheet["A%d" % (i+1)].value = i + 1
print ()
for i in sheet["A"]:
print(i.value, end=" | ") # <-列中的所有值
sheet["A11"].value = "=SUM(A1:A10)"
print(sheet['A11'].value)
wb.save("test.xlsx")
wb.close()
参考教程:
Automate the Boring Stuff with Python
用python读写excel的强大工具:openpyxl - _小苹果 - 博客园