如何用openpyxl模块处理Excel文件,过程是怎样
Admin 2022-08-12 群英技术资讯 296 次浏览
首先贴出四种方法适用范围比较:
注释:Excel 2003 即XLS文件有大小限制即65536行256列,所以不支持大文件。而Excel 2007以上即XLSX文件的限制则为1048576行16384列
最原始的莫过于两位老牌黄金搭档xlrd xlwt了,针对二者的封装有如下模块:
为什么把这三个一起说?
首先,xlutils封装了xlrd xlwt,所以在使用前,会先下载这两个依赖的模块。
其次,这两个模块主要用于处理xls文件,而对xlsx的文件处理很挫,甚至xlwt不支持…
但为何到现在依然在使用这些模块,因为他对xls文档处理的优势….
官方文档: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')
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))
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
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))#格式化输出
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()
读写 Excel 2010 xlsx/xlsm files.
最后要说说个人比较常用,也很方便的一个excel处理模块openpyxl….这个模块突出的优势在于,对excel单元格样式的设置方面特别详细。
注意:openpyxl不支持.xls格式。读写文件前记得多备注,有时候可能有bug。
官方文档:https://openpyxl.readthedocs.io/en/stable/
安装:pip install openpyxl
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)
from openpyxl import load_workbook wb = load_workbook(filename = 'empty_book.xlsx') sheet_ranges = wb['Sheet1'] print(sheet_ranges['D18'].value)
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')
样式用于在屏幕上显示时更改数据的外观。它们还用于确定数字的格式。
样式可以应用于以下方面:
以下是默认值:
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)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
在图像的处理过程中,经常需要从图像中将前景对象作为目标图像分割或者提取出来。本文就介绍了使用分水岭算法实现图像的分割与提取,感兴趣的可以了解一下
我们使用Python处理日期/时间的时候,经常会遇到各种各样的问题。本文为大家总结了两个Python比较两个日期的方法,需要的可以参考一下
由于mac默认都会安装python2.x,这给我们python开发造成不便,我们经常要用到python3.x的版本来进行测试、开发,所以本文主要介绍了Python切换版本问题,感兴趣的可以了解一下
文本主要给大家介绍python实现反转字符串的方法,也就是将给定的字符串,逆序输出。很多新手可能会觉得比较困难,其实在Python中有很多方法都可以实现,下面我们一起来看看。
首先需要明确的一点是GIL并不是Python的特性,它是在实现Python解析器(CPython)时所引入的一个概念,下面这篇文章主要给大家介绍了关于对Python中GIL的一点理解,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008