当前位置: > > > Python - 文件读写操作详解3(读写Excel文件)

Python - 文件读写操作详解3(读写Excel文件)

    借助 openpyxl 包我们可以处理 excel 文件,如果是通过 Anaconda 安装的 Python 库,那么就已经自带了 openpyxl,无需再次安装。否则需要使用 pip install openpyxl 安装。下面通过样例演示如何使用 openyxl

四、读写 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,设置对齐样式

    下面代码给指定两个单元格设置了对齐样式:水平居中,垂直居中,缩进为 0。当然对齐还支持许多样式参数,详细可参考 openpyxl 开发文档(点击访问):
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)下面代码合并了 B1D1 的所有单元格,合并后的单元格会显示原先第一个单元格的内容:
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)下面代码将对原先合并的 B1D1 单元格进行拆分。拆分后原有的合并单元格上的数据会显示在第一个单元格之中,而其他拆分出来的单元格,不会显示任何数据。
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