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文件写入功能,需要依赖numpyxlrd/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()






 

努力,才能证明自己啥也不是。。。

posted @ 2024-11-30 11:07  痴颠笑天  阅读(627)  评论(0编辑  收藏  举报