使用Python中openpyxl库来操作Excel

徘徊边缘 提交于 2020-07-28 09:57:55

执行 pip install openpyxl 安装该库

import os
os.system("pip3 install openpyxl")

新建Excel,写入数据

xlrd 只能读取Excel内容,如果你要 创建 一个新的Excel并 写入 数据,可以使用 openpyxl 库。

openpyxl 库既可以读文件、也可以写文件、也可以修改文件。

但是,openpyxl 库不支持老版本 Office2003 的 xls 格式的Excel文档,如果要读写xls格式的文档,可以使用 Excel 进行相应的格式转化。

下面的代码,演示了 openpyxl 的 一些基本用法。

import openpyxl

#创建一个Excel workbook 对象
book = openpyxl.Workbook()

#创建时,会自动产生一个sheet,通过active获取
sh = book.active

#修改当前 sheet 标题为 工资表
sh.title = '工资表'

#保存文件
book.save('信息.xlsx')

#增加一个名为 '年龄表' 的sheet,放在最后
sh1 = book.create_sheet('年龄表-最后')

#增加一个 sheet,放在最前
sh2 = book.create_sheet('年龄表-最前',0)

#增加一个 sheet,指定为第2个表单
sh3 = book.create_sheet('年龄表2',1)

#根据名称获取某个sheet对象
sh = book['工资表']

#给第一个单元格写入内容
sh['A1'] = '你好'

#获取某个单元格内容
print(sh['A1'].value)

#根据行号列号, 给第一个单元格写入内容,
#注意和 xlrd 不同,是从 1 开始
sh.cell(2,2).value = '白月黑羽'

#根据行号列号, 获取某个单元格内容
print(sh.cell(1, 1).value)

book.save('信息.xlsx')

下面的示例代码

将 保存在字典中的年龄表的内容 写入到excel文件中

import openpyxl

name2Age = {
    '张飞' :  38,
    '赵云' :  27,
    '许褚' :  36,
    '典韦' :  38,
    '关羽' :  39,
    '黄忠' :  49,
    '徐晃' :  43,
    '马超' :  23,
}

#创建一个Excel workbook 对象
book = openpyxl.Workbook()

#创建时,会自动产生一个sheet,通过active获取
sh = book.active

sh.title = '年龄表'

#写标题栏
sh['A1'] =  '姓名'
sh['B1'] =  '年龄'

#写入内容
row = 2

for name,age in name2Age.items():
    sh.cell(row, 1).value = name
    sh.cell(row, 2).value = age
    row += 1

#保存文件
book.save('信息.xlsx')

修改Excel中的数据

如果你想 修改 已经存在的Excel 文件,也可以使用 openpyxl 库。

修改单元格内容

比如

import openpyxl

# 加载 excel 文件
wb = openpyxl.load_workbook('income.xlsx')

# 得到sheet对象
sheet = wb['2017']

sheet['A1'] = '修改一下'

#指定不同的文件名,可以另存为别的文件
wb.save('income-1.xlsx')
插入行、插入列
sheet 对象的 insert_rows 和 insert_cols 方法,分别用来插入 行 和 列, 比如

import openpyxl

wb = openpyxl.load_workbook('income.xlsx')
sheet = wb['2018']

#在第2行的位置插入1行
sheet.insert_rows(2)

#在第3行的位置插入3行
sheet.insert_rows(3,3)

#在第2列的位置插入1列
sheet.insert_cols(2)

#在第2列的位置插入3列
sheet.insert_cols(2,3)

##指定不同的文件名,可以另存为别的文件
wb.save('income-1.xlsx')

删除行、删除列

sheet 对象的 delete_rows 和 delete_cols 方法,分别用来插入 行 和 列, 比如

import openpyxl

wb = openpyxl.load_workbook('income.xlsx')
sheet = wb['2018']

#在第2行的位置删除1行
sheet.delete_rows(2)

#在第3行的位置删除3行
sheet.delete_rows(3,3)

#在第2列的位置删除1列
sheet.delete_cols(2)

#在第3列的位置删除3列
sheet.delete_cols(3,3)

##指定不同的文件名,可以另存为别的文件
wb.save('income-1.xlsx')

文字 颜色、字体、大小

单元格里面的 样式风格 (包括 颜色、字体、大小、下划线 等) 都是通过 Font 对象设定的

import openpyxl
#导入Font对象 和 colors 颜色常量
from openpyxl.styles import Font,colors

wb = openpyxl.load_workbook('income.xlsx')
sheet = wb['2018']

#指定单元格字体颜色,
sheet['A1'].font = Font(color=colors.RED, #使用预置的颜色常量
                        size=15,    # 设定文字大小
                        bold=True,  # 设定为粗体
                        italic=True, # 设定为斜体
                        name='宋体',    #设置字体
                        underline='siingle' #设置下划线)

#也可以使用RGB数字表示的颜色
sheet['B1'].font = Font(color="981818")

#指定整行 字体风格, 这里指定的是第3行
font = Font(color="981818")
for y in range(1, 100): # 第 1 到 100 列
    sheet.cell(row=3, column=y).font = font

#指定整列 字体风格, 这里指定的是第2列
font = Font(bold=True)
for x in range(1, 100): # 第 1 到 100 行
    sheet.cell(row=x, column=2).font = font

wb.save('income-1.xlsx')

背景色

import openpyxl
#导入Font对象 和 colors 颜色常量
from openpyxl.styles import PatternFill

wb = openpyxl.load_workbook('income.xlsx')
sheet = wb['2018']

#指定 某个单元格背景色
sheet['A1'].fill = PatternFill("solid", "E39191")

#指定 整行 背景色, 这里指定的是第2行
fill = PatternFill("solid", "E39191")
for y in range(1, 100): # 第 1 到 100 列
    sheet.cell(row=2, column=y).fill = fill

wb.save('income-1.xlsx')

插入图片

下面是插入图片的代码

import openpyxl
from openpyxl.drawing.image import Image

wb = openpyxl.load_workbook('income.xlsx')
sheet = wb['2018']

#在第1行,第4列 的位置插入图片
sheet.add_image(Image('1.png'), 'D1')

##指定不同的文件名,可以另存为别的文件
wb.save('income-1.xlsx')

Excel COM接口

在Windows平台上,还可以通过 Excel 应用的 COM 接口 来对Excel进行操作。

这个方法相当于使用Python程序 通过 Excel应用 自己去修改,当然没有任何的副作用。

而且能够实现一些特殊的功能,比如 自动打印Excel、合并单元格 等

使用 Excel COM 接口,首先需要安装pywin32库,在命令行窗口输入如下命令:

pip install pywin32

比如可以这样修改

import win32com.client
excel = win32com.client.Dispatch("Excel.Application")

#excel.Visible = True     # 可以让excel 可见

#这里填写要修改的Excel文件的绝对路径
workbook = excel.Workbooks.Open(r"d:\tmp\income1.xlsx")

#得到 2017 表单
sheet = workbook.Sheets('2017')

#修改表单第一行第一列单元格内容
# om接口,单元格行号、列号从1开始
sheet.Cells(1,1).Value="你好"

#保存内容
workbook.Save()

#关闭该Excel文件
workbook.Close()

#excel进程退出
excel.Quit()

#释放相关资源
sheet = None
book = None
excel.Quit()
excel = None

运行一下可以发现Excel内容也能修改。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!