python openpyxl读写Excel


 

我们工作中经常需要 导入数据到Excel、从Excel导出数据、对Excel中的数据进行处理。如果 要处理的数据量很大,人工操作非常费时间。我们可以通过Python程序,自动化Excel的数据处理,帮我们节省大量的时间。

python中可以用来处理Excel的库比较多本文以 openpyxl 实现Excel的读写已经样式设置

安装openpyxl库

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

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

首先我们安装openpyxl库,执行下面的命令:

pip install openpyxl

点击这里,查看openpyxl参考文档

创建Excel以及写入数据

#创建以及读写Excel
from openpyxl import Workbook

#创建一个Workbook对象
wb = Workbook()

#指定创建的Excel文件名字
dest_filename = '员工信息.xlsx'

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

#对于初始产生的sheet标题修改为
ws1.title = "薪资表"

#创建一个sheet,名为"年龄表",在当前Excel表中放在第一位,0代表位置
ws2 = wb.create_sheet("年龄表", 0)

#创建一个sheet,名为"工龄表",在当前Excel表中放在第一位,1代表位置
ws3 = wb.create_sheet("工龄表", 1)

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

#给title为薪资表的sheet 第一个单元格写入内容
sh['A1'] = 'hello'

#获取某个(下面代码是获取A1)单元格的内容
print(sh['A1'].value)

#根据行号和列号,给单元格写入内容,需要注意行号和列号是从1开始
sh.cell(2,2).value = 'Augus'

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

#保存文件
wb.save(filename=dest_filename)

下面的示例代码 将 保存在字典中的工龄表的内容 写入到excel文件中

from openpyxl import Workbook

name_age = {
    '段天涯' :  10,
    '上官海棠' :  9,
    '归海一刀' :  9,
    '成是非' :  2,
    '古三通' :  50,
    '朱无视' :  52,
    '曹正淳' :  43,
    '万三千' :  23,
}


#创建一个Excel的workbook对象
wb = Workbook()

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

#指定自动产生的sheet的title
ws1.title = '工龄表'

#写标题
ws1['A1'] = '姓名'
ws1['B1'] = '工龄'

#写入内容,从第二行开始,第一行是title
row = 2
#items()方法把字典中每对key和value组成一个元组,并把这些元组放在列表中返回 for name,age in name_age.items(): ws1.cell(row,1).value = name ws1.cell(row,2).value = age row += 1 wb.save('工龄信息.xlsx')

如果你的数据在一个列表或者元组中,可以使用append方法在sheet的末尾添加新行,写入数据,比如

from openpyxl import Workbook

name_ages = [
    ('段天涯',10),
    ('上官海棠',9),
    ('归海一刀' ,9),
    ('成是非', 2),
    ('古三通', 50),
    ('朱无视', 52),
    ('曹正淳',43),
    ('万三千', 23),
]

#创建一个Excel的workbook对象
wb = Workbook()

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

#指定自动产生的sheet的title
ws1.title = '工龄表'

#写标题
ws1['A1'] = '姓名'
ws1['B1'] = '工龄'

for name_age in name_ages:
    ws1.append(name_age)

wb.save('工龄信息.xlsx')

修改Excel中的数据

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

修改单元格内容

比如

from openpyxl import load_workbook

#打开Excel文件
wb = load_workbook('工龄信息.xlsx')

#获取sheet对象,
#这里面有一个sheetnames可以获取当前表格所有sheet存放在一个列表中
sheet = wb['工龄表']

sheet['A1'] = '修改数据'

#指定不同的文件名,可以另存为别的文件,名字和原来相同,会在原文件修改
wb.save('工龄信息.xlsx')

插入行、插入列

sheet 对象的 insert_rows 和 insert_cols 方法,分别用来插入  和 

from openpyxl import load_workbook

#打开一个已有的文件
wb = load_workbook("工龄信息.xlsx")

#获取指定sheet对象
sheet = wb['工龄表']

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

#在第四行的位置插入5行
sheet.insert_rows(4,5)

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

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

#保存文件(文件名相同在原文件修改,文件名不同则另存为)
wb.save('hello.xlsx')

删除行、删除列

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

from openpyxl import load_workbook

#打开一个已有的文件
wb = load_workbook("hello.xlsx")
#获取指定sheet对象
sheet = wb['工龄表']

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

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

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

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

#保存
wb.save('hello.xlsx')

文字 颜色、字体、大小

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

点击这里,即可查看RGB颜色值

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

#打开Excel文件,获取文件对象信息
wb = load_workbook('工龄信息.xlsx')

#指定sheet
sheet = wb['工龄表']

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

#可以根据RGB十六进制数字表示颜色
sheet['B1'].font = Font(color='00CED1')

# 指定整行 字体风格, 这里指定的是第5行
r_font = Font(color="8B0000")
# 第 1 到 50 列
for c in range(1, 51):
    sheet.cell(row=5, column=c).font = r_font

#指定整列 字体风格 这里指定第一列
c_font = Font(color='006400')
#取第一行到第十行
for r in range(1,11):
    sheet.cell(row=r,column=1).font = c_font

wb.save('工龄信息.xlsx')

 

单元格或行背景色

from openpyxl import load_workbook
#导入模式填充
from openpyxl.styles import PatternFill

#加载Excel文件
wb = load_workbook('工龄信息.xlsx')
#指定sheet
sheet = wb['工龄表']

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

#设置第二列的背景色
for x in range(1,11):
    #第二列10个单元格背景色设置为墨绿色
    sheet.cell(x,2).fill = PatternFill('solid', '2F4F4F')

#设置行背景色
for y in range(1,11):
    #设置第三行10个单元格背景为黄色
    sheet.cell(3,y).fill = PatternFill('solid', 'FFFF00')

wb.save('工龄信息.xlsx')

插入图片

插入图片到表格中

from openpyxl import Workbook, load_workbook
from openpyxl.drawing.image import Image

#创建Excel表格
wb = Workbook()
#获取自动生成的sheet名
sheet = wb.active

# 设置文字图片单元格的行高列宽
column_width = 12.25
row_height = 80.10

# 修改列D的列宽
sheet.column_dimensions['D'].width = column_width
# 修改行3的行高
sheet.row_dimensions['3'].height = row_height

img = Image('1.jpeg')
newsize = (90, 90)
# 这两个属性分别是对应添加图片的宽高
img.width, img.height = newsize

# 向D3单元格内指定添加图片
sheet.add_image(img, 'D3')

#保存
wb.save('工龄表.xlsx')

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM