Python读写excle之openpyxl
1.1、模块介绍
Python处理excel常见的的第三方库有:xlrd,xlwt,openpyxl,xlsxwriter 等。
xlrd:用于读取Excle数据文件将返回的数据对象放到内存中,然后查询数据文件对象的相关信息。只支持xls格式。
xlwt:创建一个全新的excel文件,然后对这个文件进行写入内容以及保存。支持写入.xls文件,不支持.xlsx格式。
openpyxl:拥有读和写excel的能力,读写功能可以满足大部分的excel操作需求。需要注意的是openpyxl不支持xls文件,保存是覆盖并显示新文件。
pandas:结合了数据处理和Excel文件写入功能,需要依赖numpy
和xlrd
/openpyxl
库。
1.2、openpyxl操作方法汇总
需要注意的是使用openpyxl进行工作的时候,当一个工作结束的时候我们需要进行Excel文件的保存操作:wb.save('Mytest.xlsx')。这个保存唯一需要注意的是:文件是默认替换的。也就是说我们在保存文件的时候,openpyxl将进行替换而不发出告警。如果大家想保存不同阶段的文件,则可以在保存文件的时候加一个时间戳。
from openpyxl import Workbook
# 创建一个工作簿对象
wb = Workbook()
# 在索引为0的位置创建一个名为mySheet的sheet页
ws = wb.create_sheet('mySheet',0)
# 对sheet页设置一个颜色(16位的RGB颜色)
ws.sheet_properties.tabColor = 'ff72BA'
# 将创建的工作簿保存为ftz.xlsx
wb.save('ftz.xlsx')
# 最后关闭文件
wb.close()
from openpyxl import load_workbook
# 加载工作簿
wb2 = load_workbook('ftz.xlsx')
# 获取所有sheet页名字
print(wb2.get_sheet_names())
print(wb2.sheetnames)
# 获取sheet页
ws2 = wb2['mySheet']
ws3 = wb2.get_sheet_by_name('mySheet')
# 打印sheet页的颜色属性值
print('color:',ws2.sheet_properties.tabColor)
wb2.close()
#修改工作表名称
sheet.title="ftz"
#获取工作表名称
sheet.title
获取单元格对象和值
from openpyxl import load_workbook
# 加载工作簿
wb2 = load_workbook('ftz.xlsx')
# 获取sheet页
ws2 = wb2.get_sheet_by_name('mySheet')
#获取单元格对象
cellIns1 = ws2.cell(1,1)
cellIns2 = ws2['A1']
#获取单元格的值
cellValue1 = cellIns1.value
cellValue2 = cellIns2.value
print(cellValue1)
print(cellValue2)
wb2.close()
往单元格写入值
#方式一
ws2.cell(5,1).value="海南"
ws2.cell(5,2).value="三亚"
#方式二
ws2["A6"]="北京"
ws2["B6"]="天安门"
#方式三s
ws2.cell(7,1,"山东")
ws2.cell(7,2,"趵突泉")
#保存工作簿
wb2.save("ftz.xlsx")
获取工作表的最大行和最大列
#获取最大行:
ws2.max_row
#获取最大列:
ws2.max_column
获取多个单元格
#获取A1到A3的单元格
cell1=ws2['A1:A3']
#获取第一行和第二行的单元格
cell2=ws2[1:2]
#获取A列到C列的单元格
cell3=ws2['A:B']
print(cell1[0][0].value,cell1[1][0].value)
print(cell2)
print(cell3)
插入删除行列
'''
#插入行
ws2.insert_rows(idx=数字编号,amount=要插入行数)
#删除行
ws2.delete_rows(idx=数字编号,amount=要插入行数)
#插入列
ws2.insert_cols(idx=数字编号,amount=要插入列数)
#删除列
ws2.delete_cols(idx=数字编号,amount=要插入列数)
'''
#从第二行开始插入三行
ws2.insert_rows(idx=2,amount=3)
wb2.save('ftz.xlsx')
示例代码:
newExcel = r"D:\FTZ\year\5month\kw_ftz\BYTE.xlsx" if os.path.exists(newExcel): #文件存在则载入存在的文件 workBook = openpyxl.load_workbook(filename = newExcel) else: #文件不存在则创建新的文件,并将默认的sheet重命名 workBook = openpyxl.Workbook() defaultWorkSheet = workBook.active defaultWorkSheet.title = "BYTE" #选择要操作的sheet页 worksheet = workBook.get_sheet_by_name("BYTE") #获取要操作的sheet #写入 for row in range(0,len(result)): worksheet.append(result[row]) #result是一个列表,表示要写入的内容 workBook.save(filename=newExcel) #保存
============================================================================================
1.3、xlrd操作方法汇总
注意:在使用 xlrd 读取 .xlsx 文件时,由于 xlrd 从版本 2.0.0 开始停止支持 .xlsx 格式,可能会遇到 xlrd.biffh.XLRDError: Excel xlsx file; not supported 的错误。
如果需要读取.xlsx文件,你可能需要安装1.2.0版本的xlrd。
# coding:utf-8
import xlrd
workbook = xlrd.open_workbook(r'./code/excelRead/test.xls')
#print(workbook)
# 获取所有的工作表名
sheet_names = workbook.sheet_names()
#print(sheet_names)
# 获取所有的sheet对象
Sheets = workbook.sheets()
print(Sheets)
# 方式一:通过索引选取
sheet1 = workbook.sheets()[0]
print(sheet1 ) # Sheet 0:<sdxl>
# 方式二:通过索引选取
sheet2 = workbook.sheet_by_index(2)
print(sheet2) # Sheet 2:<sdyxz>
# 方式三:通过表名选取,返回一个<class 'xlrd.sheet.Sheet'>对象
sheet = workbook.sheet_by_name("hzgg")
print(sheet) # Sheet 1:<hzgg>
# 通过索引,检查某个sheet是否导入完毕
print(workbook.sheet_loaded(0)) # True
# 通过文件名,检查某个sheet是否导入完毕
print(workbook.sheet_loaded("hzgg")) # True
对行(row)的操作
sheet.row_len(rowx) #通过row_len()方法获取行长度
sheet.row_values(rowx, start_colx=0, end_colx=None) #返回该行的值数据列表
对列(colnum)的操作
sheet.col_len(colx) #通过col_len()方法获取列长度
sheet.col_values(colx, start_rowx=0, end_rowx=None) #返回该列的值数据列表
对单元格的操作
sheet.cell_value(rowx,colx) #返回该单元格的数值
sheet.cell_type(rowx,colx) #返回该单元格的数据类型
1.4、xlwt操作方法汇总
新建工作簿
xlsx = xlwt.Workbook( encoding="utf-8" ) # 新建Workbook对象,参数为设置编码为utf-8
添加工作表
sheet = xlsx.add_sheet( "sheet1", cell_overwrite_ok=True )
创建一个sheet对象,一个sheet对象对应Excel文件中的一张工作表
参数:工作表名称;是否允许覆盖写入,默认为False,如果为False,如果在代码中对同一单元格多次写入时会报错
设置单元格宽度
sheet.col(0).width = 256 * num
设置第一列的宽度,num为字符的个数,256为单个字符的宽度
写入单元格
sheet.write( i, j, content, style )
写入第i行第j列的单元格(从0开始计数),style为实现设定的单元格样式,详见单元格样式说明
合并单元格写入
sheet.write_merge( topRow, bottomRow, leftCol, rightCol, content, style )
保存工作簿
xlsx.save( path )
写入的内容必须与工作簿的编码一致,否则在保存的时候会报错,比如,设置编码为utf-8,那么所有写入的内容都必须是utf-8的编码
单元格样式说明
alignment = xlwt.Alignment() #新建alignment
alignment.horz = xlwt.Alignment.HORZ_CENTER #设置行居中
alignment.vert = xlwt.Alignment.VERT_CENTER #设置列居中
alignment.wrap = xlwt.Alignment.WRAP_AT_RIGHT #设置自动换行
font = xlwt.Font() #新建font
font.bold = True #字体加粗
font.height = 12 * 20,12号的字体 #设置字体大小
font.name = "SimSun" #设置为宋体
borders = xlwt.Borders() #新建borders
borders.left = xlwt.Borders.THIN #设置表格宽度
style = xlwt.XFStyle() #新建style
style.alignment = alignment #为style设置alignment
style.font = font #为style设置font
style.borders = borders #为style设置borders
5、常用读写库介绍
python在操作excel的时候,用到很多库,常用的有xlwings、xlrd、xlwt、xlutils、xlsxwriter、openpyxl、pandas。这几个库都是第三方库,需要install和import才能使用
xlrd和xlwt是早期支持操作excel的库,目前最新版本都只支持xls格式,不支持xlsx格式文件。xlrd负责读取excel文件,xlwt负责对excel进行写的操作。xlwt 和 xlrd 不光名字像,连很多函数和操作格式也是完全相同。xlrd和xlwt不支持xlxs的原因:XLSX 是 Microsoft Office 2007 之后的 Excel 文件格式,它采用了基于 XML 的文件结构。与之前的 XLS 格式相比,XLSX 格式有更好的扩展性和兼容性。然而,xlrd 库是基于旧的二进制 XLS 文件格式开发的,因此无法直接读取 XLSX 文件。
xlutils(excel utilities)是一个提供了许多操作修改 excel 文件方法的库。xlutils 库也仅仅是通过复制一个副本进行操作后保存一个新文件,xlutils 库就像是 xlrd 库和 xlwt 库之间的一座桥梁,因此,xlutils 库是依赖于 xlrd 和 xlwt 两个库的。简单来说,xlrd 负责读、xlwt 负责写、xlutils 负责提供辅助和衔接
xlwings 能够非常方便的读写 Excel 文件中的数据,并且能够进行单元格格式的修改
openpyxl通过 工作簿 “workbook - 工作表 sheet - 单元格 cell” 的模式对 .xlsx 文件进行读、写、改,并且可以调整样式。它是由于缺乏从 Python 中读取 / 编写 Office Open XML 格式的现有库而诞生的。
pandas 是基于 NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具
xlsxwriter是用于创建 Excel XLSX 文件的 Python 模块,可用于将文本、数字、公式和超链接写入 Excel2007 + XLSX 文件中的多个工作表。它可以用于将文本、数字和公式写入多个工作表,并支持格式、图像、图表、页面设置、自动筛选、条件格式和许多其他功能
一般的组合使用Pandas和openpyxl库是相互互补的。Pandas绝对是Python中处理Excel最快、最好用的库,但是使用 openpyxl 的一些优势是能够轻松地使用样式、条件格式等自定义电子表格
————————————————
原文链接:
https://blog.csdn.net/liyue121100132/article/details/143143252
https://blog.csdn.net/qq_27071221/article/details/124822548
无脑使用模板:
获取单元格对象和值 from openpyxl import load_workbook # 加载工作簿 wb2 = load_workbook('ftz.xlsx') # 获取sheet页 ws2 = wb2.get_sheet_by_name('mySheet') #获取单元格对象 cellIns1 = ws2.cell(1,1) cellIns2 = ws2['A1'] #获取单元格的值 cellValue1 = cellIns1.value cellValue2 = cellIns2.value print(cellValue1) print(cellValue2) wb2.close()
努力,才能证明自己啥也不是。。。