我们工作中经常需要 导入数据到Excel、从Excel导出数据、对Excel中的数据进行处理。如果 要处理的数据量很大,人工操作非常费时间。我们可以通过Python程序,自动化Excel的数据处理,帮我们节省大量的时间。
python中可以用来处理Excel的库比较多本文以 openpyxl 实现Excel的读写已经样式设置
安装openpyxl库
openpyxl
库既可以读文件、也可以写文件、也可以修改文件。
但是,openpyxl 库不支持老版本 Office2003 的 xls
格式的Excel文档,如果要读写xls格式的文档,可以使用 Excel 进行相应的格式转化。
首先我们安装openpyxl库,执行下面的命令:
pip install 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
对象设定的
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')