Python学习之道-处理Excel电子表格

一、各个工具对比

 XlsxWriterxlrd&xlwt&xlutilsOpenPyXLMicrosoft Excel API
介绍可以创建和写Excel 2007+ XLSX文件xlrd、xlwt、xlutils三大模块分别提供读、写和其他功能可以读、写Excel 2007+ /xlsm/xltx/xltm文件直接通过COM组件与Microsoft Excel进程通信调用各种功能实现对excel文件操作
修改⚠️
.xls
.xlsx
    • xlrd: 0.8.0+ √

  • * xlwt:✘
大文件
功能一般超强
速度超慢
系统无限制无限制无限制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 - _小苹果 - 博客园

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值