Python使用openpyxl模块处理Excel文件


Posted in Python onJune 05, 2022

首先贴出四种方法适用范围比较:

注释:Excel 2003 即XLS文件有大小限制即65536行256列,所以不支持大文件。而Excel 2007以上即XLSX文件的限制则为1048576行16384列

一、xlutils & xlrd & xlwt

最原始的莫过于两位老牌黄金搭档xlrd xlwt了,针对二者的封装有如下模块:

为什么把这三个一起说?

首先,xlutils封装了xlrd xlwt,所以在使用前,会先下载这两个依赖的模块。

其次,这两个模块主要用于处理xls文件,而对xlsx的文件处理很挫,甚至xlwt不支持…

但为何到现在依然在使用这些模块,因为他对xls文档处理的优势….

1、xlutils

官方文档:https://xlutils.readthedocs.io/en/latest/api.html

github项目:https://github.com/python-excel/xlutils

安装:(如果没安装xlrd、xlwt,会自动安装这2个模块)

pip install xlutils

使用:

import xlrd
import xlwt
import xlutils

import xlutils.copy as copy

rdbook = xlrd.open_workbook('first.xls')
wtbook = copy.copy(rdbook)
wtsheet = wtbook.get_sheet(0)
type(wtsheet)
wtsheet.write(0,0,'pcat.cc')
wtbook.save('second.xls')

2、xlrd

xlrd is a library for reading data and formatting information from Excel files, whether they are .xls or .xlsx files.

官方文档:https://xlrd.readthedocs.io/en/latest/api.html

github项目:https://github.com/python-excel/xlrd

安装:pip install xlrd

使用:只能读.xls、.xlsx文件(xlrd0.8.0+版本支持读取xlsx文件)

import xlrd
book = xlrd.open_workbook("pcat.xls")
print("The number of worksheets is {0}".format(book.nsheets))
print("Worksheet name(s): {0}".format(book.sheet_names()))
sh = book.sheet_by_index(0)
print("{0} {1} {2}".format(sh.name, sh.nrows, sh.ncols))
print("Cell B3 is {0}".format(sh.cell_value(rowx=2, colx=1)))
for rx in range(sh.nrows):
    print(sh.row(rx))

3、xlwt

xlwt is a library for writing data and formatting information to older Excel files (ie: .xls)

官方文档:https://xlwt.readthedocs.io/en/latest/api.html

github项目:https://github.com/python-excel/xlwt

安装:pip install xlwt

使用:用xlwt创建一个简单的.xls文件

import xlwt
from datetime import datetime

style0 = xlwt.easyxf('font: name Times New Roman, color-index red, bold on',
    num_format_str='#,##0.00')
style1 = xlwt.easyxf(num_format_str='YYYY-MM-DD HH:MM:SS')

wb = xlwt.Workbook()
ws = wb.add_sheet('A Test Sheet')

ws.write(0, 0, 1234.56, style0)
ws.write(1, 0, datetime.now(), style1)
ws.write(2, 0, 1)
ws.write(2, 1, 1)
ws.write(2, 2, xlwt.Formula("A3+B3"))

wb.save('example.xls')

二、pandas(推荐)

pandas

https://www.pypandas.cn/

pandas作为数据分析利器,在读写excel方面,依赖库xlrd和xlwt。

import   pandas   as pd
 
#方法一:默认读取第一个表单
df=pd.read_excel('lemon.xlsx')#这个会直接默认读取到这个Excel的第一个表单
data=df.head()#默认读取前5行的数据
print("获取到所有的值:\n{0}".format(data))#格式化输出
 
#方法二:通过指定表单名的方式来读取
df=pd.read_excel('lemon.xlsx',sheet_name='student')#可以通过sheet_name来指定读取的表单
data=df.head()#默认读取前5行的数据
print("获取到所有的值:\n{0}".format(data))#格式化输出
 
#方法三:通过表单索引来指定要访问的表单,0表示第一个表单
#也可以采用表单名和索引的双重方式来定位表单
#也可以同时定位多个表单,方式都罗列如下所示
df=pd.read_excel('lemon.xlsx',sheet_name=['python','student'])#可以通过表单名同时指定多个
# df=pd.read_excel('lemon.xlsx',sheet_name=0)#可以通过表单索引来指定读取的表单
# df=pd.read_excel('lemon.xlsx',sheet_name=['python',1])#可以混合的方式来指定
# df=pd.read_excel('lemon.xlsx',sheet_name=[1,2])#可以通过索引 同时指定多个
data=df.values#获取所有的数据,注意这里不能用head()方法哦~
print("获取到所有的值:\n{0}".format(data))#格式化输出

三、xlsxwriter

https://xlsxwriter.readthedocs.io/

xlsxwriter拥有丰富的特性,支持图片/表格/图表/筛选/格式/公式等,功能与openpyxl相似,优点是相比 openpyxl 还支持 VBA 文件导入,迷你图等功能,缺点是不能打开/修改已有文件,意味着使用 xlsxwriter 需要从零开始。

注意:XlsxWriter不支持.xls格式。

代码示例:

import xlsxwriter
 
# Create a workbook and add a worksheet.
workbook = xlsxwriter.Workbook('Expenses01.xlsx')
worksheet = workbook.add_worksheet()
 
# Some data we want to write to the worksheet.
expenses = (['Rent', 1000], ['Gas',     100],['Food',   300], ['Gym',       50],)
 
# Start from the first cell. Rows and columns are zero indexed.
row = 0
col = 0
 
# Iterate over the data and write it out row by row.
for item, cost in (expenses):       
   worksheet.write(row, col,     item)       
   worksheet.write(row, col + 1, cost)       
   row += 1
 
# Write a total using a formula.
worksheet.write(row, 0, 'Total')
worksheet.write(row, 1, '=SUM(B1:B4)')
worksheet.write('A1', 'Hello world')

workbook.close()

四、openpyxl(推荐)

读写 Excel 2010 xlsx/xlsm files.

最后要说说个人比较常用,也很方便的一个excel处理模块openpyxl….这个模块突出的优势在于,对excel单元格样式的设置方面特别详细。

注意:openpyxl不支持.xls格式。读写文件前记得多备注,有时候可能有bug。

官方文档:https://openpyxl.readthedocs.io/en/stable/

安装:pip install openpyxl

1、写一个工作簿

from openpyxl import Workbook
from openpyxl.utils import get_column_letter

wb = Workbook()
dest_filename = 'empty_book.xlsx'

ws1 = wb.active
ws1.title = "range names"

for row in range(1, 40):  
   ws1.append(range(600))

ws2 = wb.create_sheet(title="Pi")
ws2['F5'] = 3.14
ws2['A1'] = 42  # Data can be assigned directly to cells
ws2.append([1, 2, 3])# Rows can also be appended

# Python types will automatically be converted
import datetime
ws2['A2'] = datetime.datetime.now()

ws3 = wb.create_sheet(title="Data")
for row in range(10, 20):     
  for col in range(27, 54):         
     _ = ws3.cell(column=col, row=row, value="{0}".format(get_column_letter(col)))
print(ws3['AA10'].value)

wb.save(filename = dest_filename)

2、读取现有工作簿

from openpyxl import load_workbook

wb = load_workbook(filename = 'empty_book.xlsx')
sheet_ranges = wb['Sheet1']
print(sheet_ranges['D18'].value)

3.、插入图像 (需要依赖pillow..)

from openpyxl import Workbook
from openpyxl.drawing.image import Image
 
wb = Workbook()
ws = wb.active
ws['A1'] = 'You should see three logos below'
img = Image('logo.png') # create an image
ws.add_image(img, 'A1') # add to worksheet and anchor next to cells
wb.save('logo.xlsx')

4、使用样式

样式用于在屏幕上显示时更改数据的外观。它们还用于确定数字的格式。

样式可以应用于以下方面:

  • 字体设置字体大小,颜色,下划线等
  • 填充以设置图案或颜色渐变
  • 边框设置单元格上的边框
  • 单元格排列
  • 保护

以下是默认值:

from openpyxl.styles import PatternFill, Border, Side, Alignment, Protection, Font

font = Font(name='Calibri',size=11,bold=False, italic=False,vertAlign=None,underline='none',strike=False, color='FF000000')
fill = PatternFill(fill_type=None, start_color='FFFFFFFF', end_color='FF000000')
border = Border(left=Side(border_style=None,color='FF000000'),   right=Side(border_style=None,color='FF000000'), 
     top=Side(border_style=None, color='FF000000'), bottom=Side(border_style=None, color='FF000000'), 
                 diagonal=Side(border_style=None, color='FF000000'), diagonal_direction=0,   outline=Side(border_style=None,color='FF000000'), 
                 vertical=Side(border_style=None,color='FF000000'),   horizontal=Side(border_style=None,color='FF000000') )
alignment=Alignment(horizontal='general',vertical='bottom',   text_rotation=0, wrap_text=False,   shrink_to_fit=False, indent=0)
number_format = 'General'
protection = Protection(locked=True,   hidden=False)

到此这篇关于Python使用openpyxl模块处理Excel文件的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。


Tags in this post...

Python 相关文章推荐
使用python解析xml成对应的html示例分享
Apr 02 Python
Python的Django框架中if标签的相关使用
Jul 15 Python
python做反被爬保护的方法
Jul 01 Python
使用python写的opencv实时监测和解析二维码和条形码
Aug 14 Python
Python3多线程版TCP端口扫描器
Aug 31 Python
Python数学形态学实例分析
Sep 06 Python
python-web根据元素属性进行定位的方法
Dec 13 Python
解决Tensorboard 不显示计算图graph的问题
Feb 15 Python
python GUI库图形界面开发之PyQt5打开保存对话框QFileDialog详细使用方法与实例
Feb 27 Python
python中adb有什么功能
Jun 07 Python
Python openpyxl模块实现excel读写操作
Jun 30 Python
无惧面试,带你搞懂python 装饰器
Aug 17 Python
Python中requests库的用法详解
Jun 05 #Python
Python加密与解密模块hashlib与hmac
Jun 05 #Python
Python日志模块logging用法
Jun 05 #Python
Python使用Beautiful Soup(BS4)库解析HTML和XML
Jun 05 #Python
Python四款GUI图形界面库介绍
Python序列化模块JSON与Pickle
Jun 05 #Python
python 判断字符串当中是否包含字符(str.contain)
You might like
我的php学习笔记(毕业设计)
2012/02/21 PHP
php对数组排序的简单实例
2013/12/25 PHP
Laravel数据库读写分离配置的方法
2019/10/13 PHP
jquery tools之tabs 选项卡/页签
2009/07/25 Javascript
Jquery设置attr的disabled属性控制某行显示或者隐藏
2014/09/25 Javascript
js实现用户注册协议倒计时的方法
2015/01/21 Javascript
vuejs动态组件给子组件传递数据的方法详解
2016/09/09 Javascript
D3.js实现柱状图的方法详解
2016/09/21 Javascript
javaScript 事件绑定、事件冒泡、事件捕获和事件执行顺序整理总结
2016/10/10 Javascript
解析Javascript单例模式概念与实例
2016/12/05 Javascript
微信页面倒计时代码(解决safari不兼容date的问题)
2016/12/13 Javascript
bootstrap table分页模板和获取表中的ID方法
2017/01/10 Javascript
jQuery倒计时代码(超简单)
2017/02/27 Javascript
create-react-app 修改为多入口编译的方法
2018/08/01 Javascript
Vue-router的使用和出现空白页,路由对象属性详解
2018/09/03 Javascript
KOA+egg.js集成kafka消息队列的示例
2018/11/09 Javascript
微信小程序map组件结合高德地图API实现wx.chooseLocation功能示例
2019/01/23 Javascript
Vue.js实现开发购物车功能的方法详解
2019/02/22 Javascript
vue(2.x,3.0)配置跨域代理
2019/11/27 Javascript
JS实现导航栏楼层特效
2020/01/01 Javascript
在Python中使用mechanize模块模拟浏览器功能
2015/05/05 Python
详解Python中break语句的用法
2015/05/14 Python
django传值给模板, 再用JS接收并进行操作的实例
2018/05/28 Python
Python实现针对json中某个关键字段进行排序操作示例
2018/12/25 Python
python 通过类中一个方法获取另一个方法变量的实例
2019/01/22 Python
python3的print()函数的用法图文讲解
2019/07/16 Python
python3实现高效的端口扫描
2019/08/31 Python
Python warning警告出现的原因及忽略方法
2020/01/31 Python
利用Python脚本批量生成SQL语句
2020/03/04 Python
制冷与电控专业应届生求职信
2013/11/11 职场文书
设计师个人求职信范文
2014/02/02 职场文书
广播节目策划方案
2014/05/23 职场文书
党员四风自我剖析材料思想汇报
2014/09/13 职场文书
2014年统计工作总结
2014/11/21 职场文书
广播体操比赛主持词
2015/06/29 职场文书
python使用PySimpleGUI设置进度条及控件使用
2021/06/10 Python