Python - 文件读写操作详解3(读写Excel文件)
作者:hangge | 2022-04-20 08:48
借助 openpyxl 包我们可以处理 excel 文件,如果是通过 Anaconda 安装的 Python 库,那么就已经自带了 openpyxl,无需再次安装。否则需要使用 pip install openpyxl 安装。下面通过样例演示如何使用 openyxl。
(3)获取指定 sheet 页的方式有许多种,下面样例效果都一样,均为获取第一个 sheet 页:
(4)我们也可以直接获取指定单元格数据,下面两个代码都是获取 B2 单元格数据(小李):
(2)下面代码创建一个全新的 excel 文件,并在里面填充一些数据:
(2)这里我们给两个单元格设置了个自定义样式:字体为微软雅黑,字体大小为 10,不加粗,没有斜体,没有下划线,没有删除线,颜色为红色。
(2)下面样例代码给两个单元格设置了黄色背景:
(2)合并后的效果图如下:
(2)拆分后的效果图如下:
四、读写 Excel 文件
1,读取 excel
(1)假设我们有个 hangge.xlsx 文件,内容如下:
(2)下面代码遍历文件中第一个 sheet 页的所有数据,并打印出来:
from openpyxl import load_workbook wb = load_workbook('hangge.xlsx') #获取文件对象 sheet = wb.active #获取第一个sheet for row in sheet.iter_rows(): for cell in row: print(cell.coordinate, ':', cell.value) print('-----------')
(3)获取指定 sheet 页的方式有许多种,下面样例效果都一样,均为获取第一个 sheet 页:
sheet = wb.active sheet = wb.worksheets[0] sheet = wb['用户']
(4)我们也可以直接获取指定单元格数据,下面两个代码都是获取 B2 单元格数据(小李):
print(sheet['B2'].value) print(sheet.cell(2,2).value)
2,写入 excel
(1)下面代码对已有的 excel 文件进行修改:修改两个指定单元格的值,然后删除一行数据,最后再插入一行数据:
import datetime from openpyxl import load_workbook wb = load_workbook('hangge.xlsx') #获取文件对象 sheet = wb.active #获取第一个sheet sheet['C2'].value = datetime.datetime.now() #修改C2单元格数据 sheet.cell(3,3).value = datetime.datetime.now() #修改C3单元格数据 sheet.delete_rows(4) # 删除第4行 sheet.append([99,'航哥',100]) # 插入一行数据 wb.save("hangge.xlsx") #保存文件
(2)下面代码创建一个全新的 excel 文件,并在里面填充一些数据:
import datetime from openpyxl import Workbook wb = Workbook() # 创建一个Workbook对象 sheet = wb.active #获取第一个sheet sheet.append([1,'小李',datetime.datetime.now()]) # 插入一行数据 sheet.append([2,'小刘',datetime.datetime.now()]) # 插入一行数据 wb.save("test.xlsx") #保存文件
(3)我们也可以自由创建 sheet 页,下面代码创建了两个新的 sheet(加上一个默认的,一共便有三个 sheet):
import datetime from openpyxl import Workbook wb = Workbook() # 创建一个Workbook对象 sheet1 = wb.create_sheet("组织") #创建一个sheet sheet2 = wb.create_sheet("临时", 0) #设定sheet的插入位置 默认插在后面 sheet2.title = u"人员" #设定一个sheet的名字 必须是Unicode sheet2.append([1,'小李',datetime.datetime.now()]) # 插入一行数据 sheet2.append([2,'小刘',datetime.datetime.now()]) # 插入一行数据 wb.save("test.xlsx") #保存文件
附一:设置样式
1,设置字体样式
(1)要设置字体样式,我们需要先引入了 Excel 中的字体样式,然后通过构造函数,创建了一个样式,然后将样式设置到单元格中去即可:
from openpyxl.styles import Font font = Font(name='微软雅黑', size=10, bold=False, italic=False, vertAlign=None, underline='none', strike=False, color='FF0000') from openpyxl import load_workbook wb = load_workbook('test.xlsx') #获取文件对象 sheet = wb.active #获取第一个sheet sheet.cell(1,2).font = font #设置B1单元格样式 sheet['C2'].font = font #设置C2单元格样式 wb.save("test.xlsx") #保存文件
(2)这里我们给两个单元格设置了个自定义样式:字体为微软雅黑,字体大小为 10,不加粗,没有斜体,没有下划线,没有删除线,颜色为红色。
2,设置填充样式
(1)我们还可以给指定单元格填充背景色、或者填充图案等。目前支持如下图案类型:
{‘gray0625’, ‘lightHorizontal’, ‘darkVertical’, ‘darkGray’, ‘darkDown’, ‘solid’, ‘lightTrellis’, ‘darkHorizontal’, ‘gray125’, ‘lightGray’, ‘lightDown’, ‘lightUp’, ‘mediumGray’, ‘darkUp’, ‘darkGrid’, ‘darkTrellis’, ‘lightVertical’, ‘lightGrid’}
(2)下面样例代码给两个单元格设置了黄色背景:
from openpyxl.styles import PatternFill fill = PatternFill(fill_type='solid', start_color='ffff00') from openpyxl import load_workbook wb = load_workbook('test.xlsx') #获取文件对象 sheet = wb.active #获取第一个sheet sheet.cell(1,2).fill = fill #设置B1单元格填充样式 sheet['C2'].fill = fill #设置C2单元格填充样式 wb.save("test.xlsx") #保存文件
(3)下面代码将单元格使用红黄相间的格栅化样式填充:
from openpyxl.styles import PatternFill fill = PatternFill(fill_type='darkUp', start_color='FFFF00', end_color='FF0000') from openpyxl import load_workbook wb = load_workbook('test.xlsx') #获取文件对象 sheet = wb.active #获取第一个sheet sheet.cell(1,2).fill = fill #设置B1单元格填充样式 sheet['C2'].fill = fill #设置C2单元格填充样式 wb.save("test.xlsx") #保存文件
3,设置边框样式
下面代码给指定的两个单元格添加了紫色虚线边框,当然边框还支持许多样式参数,详细可参考 openpyxl 开发文档(点击访问):
from openpyxl.styles import Border border = Border(left=Side(border_style='dotted',color='9932CC'), right=Side(border_style='dotted',color='9932CC'), top=Side(border_style='dotted',color='9932CC'), bottom=Side(border_style='dotted',color='9932CC')) from openpyxl import load_workbook wb = load_workbook('test.xlsx') #获取文件对象 sheet = wb.active #获取第一个sheet sheet.cell(1,2).border = border #设置B1单元格边框样式 sheet['C2'].border = border #设置C2单元格边框样式 wb.save("test.xlsx") #保存文件
4,设置对齐样式
from openpyxl.styles import Alignment alignment = Alignment(horizontal='center', vertical='center', indent='0') from openpyxl import load_workbook wb = load_workbook('test.xlsx') #获取文件对象 sheet = wb.active #获取第一个sheet sheet.cell(1,2).alignment = alignment #设置B1单元格对齐样式 sheet['C2'].alignment = alignment #设置C2单元格对齐样式 wb.save("test.xlsx") #保存文件
附二:单元格的合并与拆分
1,单元格合并
(1)下面代码合并了 B1 到 D1 的所有单元格,合并后的单元格会显示原先第一个单元格的内容:
from openpyxl import load_workbook wb = load_workbook('test.xlsx') #获取文件对象 sheet = wb.active #获取第一个sheet sheet.merge_cells('B1:D1') #合并单元格 wb.save("test.xlsx") #保存文件
(2)合并后的效果图如下:
2,单元格拆分
(1)下面代码将对原先合并的 B1 到 D1 单元格进行拆分。拆分后原有的合并单元格上的数据会显示在第一个单元格之中,而其他拆分出来的单元格,不会显示任何数据。
from openpyxl import load_workbook wb = load_workbook('test.xlsx') #获取文件对象 sheet = wb.active #获取第一个sheet sheet.unmerge_cells('B1:D1') #拆分单元格 wb.save("test.xlsx") #保存文件
(2)拆分后的效果图如下:
全部评论(0)