目录
Excel写入数据-xlwt
Excel读取数据-xlrd
Excel更新数据-xlutils
Excel设置样式
Excel读取数据-openpyxl
Excel写入数据-openpyxl
Excel写入样式-openpyxl
Excel合并单元格-openpyxl
办公自动化是将现代化办公和计算机技术结合起来的一种新型的办 公方式 office 家族其实都可以用 VBA 解决自动化的问题,但可能很多人不 会用 python 针对 excel 有很多的第三方库可以用,比如 xlwings、 xlsxwriter、xlrd、xlwt、pandas、 xlsxwriter、win32com、xlutils 等等 这些库可以很方便地实现对 excel 文件的增删改写、格式修改等, 当然并不推荐你全部都去学 尝试一下,这样时间成本太大了
xlrd:用于读取 Excel 文件;
xlwt:用于写入 Excel 文件;
xlutils:用于操作 Excel 文件的实用工具,比如复制、分割、筛选等
安装
pip install xlwt
常用方法
代码演示
# 导入xlwt模块
import xlwt
# 创建excel
wb = xlwt.Workbook()
# 创建一个工作薄
ws = wb.add_sheet('电影')
# 往工作薄的单元格增加数据
# ws.write(row,col) 从0开始记数
# 增加第1行数据
ws.write(0,0,'影片')
ws.write(0,1,'综合票房')
ws.write(0,2,'票房占比')
ws.write(0,3,'排片场次')
# 增加第2行数据
ws.write(1,0,'如果声音记不得')
ws.write(1,1,361.57)
ws.write(1,2,33.3)
ws.write(1,3,95371)
# 保存数据
wb.save('./create_data/01_电影数据.xlsx')
安装
pip install xlrd
常用方法与属性
# 导入模块
import xlrd
# 打开excel文件
wb = xlrd.open_workbook('./create_data/01_电影数据.xlsx')
# 读取里面的数据
# 获取工作薄
print(f'excel中有{wb.nsheets}个工作薄')
print(f'excel中sheets的名字:{wb.sheet_names()}')
# 选中工作薄
ws1 = wb.sheet_by_index(0)
ws2 = wb.sheet_by_name('电影')
# print(ws1)
# print(ws2)
# 获取单元格的数据
print(f'sheet里面一共有{ws1.nrows}行 {ws1.ncols}列的数据')
# 获取单个单元格
print(f'第1行第2列的值:{ws1.cell_value(0,1)}')
print(f'第1行第2列的值:{ws1.cell(0,1).value}')
print(f'第1行第2列的值:{ws1.row(0)[1].value}')
# 获取多个单元格
print(f'第1行的数据是:{ws1.row_values(0)}')
print(f'第1列的数据是:{ws1.col_values(0)}')
# 获取所有单元格
for r in range(ws1.nrows):
for c in range(ws1.ncols):
print(f'第{r}行 第{c}列的数据是:{ws1.cell_value(r,c)}')
安装
pip install xlutils
常用方法与属性
import xlrd
from xlutils.copy import copy
# 读取文件
read_wb = xlrd.open_workbook('./create_data/01_电影数据.xlsx')
# 复制文件
wb = copy(read_wb)
# 修改数据
# 获取当前excel里面的第1个工作薄
ws = wb.get_sheet(0)
# 增加数据
ws.write(5,0,'保家卫国')
ws.write(5,1,113)
ws.write(5,2,5.1)
ws.write(5,3,490)
# 增加统计信息
read_ws = read_wb.sheet_by_index(0)
count = 0
for r in range(1,read_ws.nrows):
num = read_ws.cell_value(r,3)
# 累加排场次数
count += num
# 增加一个新的工作薄
new_ws = wb.add_sheet('汇总数据')
new_ws.write(0,0,'总排片次数')
new_ws.write(0,1,count)
# 保存数据
wb.save('./create_data/02_电影数据_new.xlsx')
常用方法与属性
import xlwt
# 创建一个excel文件
wb = xlwt.Workbook()
# 创建一个工作薄
ws = wb.add_sheet('数据')
# 设置样式
# 创建一个字体样式
ft = xlwt.Font()
ft.name = '微软雅黑' # 设置字体
ft.height = 30*20 # 设置字体大小
ft.bold = True # 设置字体加粗
ft.underline = True # 设置字体下划线
ft.italic = True # 设置字体斜体
ft.colour_index = 2 # 设置字体颜色
# 创建一个样式对象
style1 = xlwt.XFStyle()
style1.font = ft
# 增加内容
ws.write(1,1,'吕小布')
ws.write(2,2,'吕小布',style1)
# 保存数据
wb.save('./create_data/03_excel样式.xlsx')
设置边框
import xlwt
# 创建一个excel文件
wb = xlwt.Workbook()
# 创建一个工作薄
ws = wb.add_sheet('数据')
# 设置样式
# 创建一个字体样式
boder = xlwt.Borders()
# 线的种类
# 细实线:1,小粗实线:2,细虚线:3,中细虚线:4,大粗实线:5,双线:6,细点虚线:7
boder.top = 1
boder.bottom = 6
boder.left = 4
boder.right = 5
# 线的颜色
boder.top_colour = 3
boder.bottom_colour = 4
boder.left_colour = 7
boder.right_colour = 6
# 创建一个样式对象
style1 = xlwt.XFStyle()
style1.borders = boder
# 增加内容
ws.write(1,1,'吕小布')
ws.write(2,2,'吕小布',style1)
# 保存数据
wb.save('./create_data/04_excel样式_边框.xlsx')
设置内容
import xlwt
# 创建一个excel文件
wb = xlwt.Workbook()
# 创建一个工作薄
ws = wb.add_sheet('数据')
# 设置样式
# 创建一个字体样式
align = xlwt.Alignment()
# 设置 上下位置 0 上 1 中 2 下
align.vert = 1
# 设置 左右位置 1左 2中 3右
align.horz = 2
# 设置单元格大小
# 如果要设置单元格高度,需要开启设置高度属性
ws.row(2).height_mismatch= True # 开启设置高度权限
ws.row(2).height = 50 *256
ws.col(2).width = 50 * 50
# 创建一个样式对象
style1 = xlwt.XFStyle()
style1.alignment = align
# 增加内容
ws.write(1,1,'吕小布')
ws.write(2,2,'吕小布',style1)
# 保存数据
wb.save('./create_data/05_excel样式_内容位置.xlsx')
设置背景
import xlwt
# 创建一个excel文件
wb = xlwt.Workbook()
# 创建一个工作薄
ws = wb.add_sheet('数据')
# 设置样式
# 创建一个字体样式
pattern = xlwt.Pattern()
pattern.pattern = xlwt.Pattern.SOLID_PATTERN # 实心颜色
pattern.pattern_fore_colour = 6
# 创建一个样式对象
style1 = xlwt.XFStyle()
style1.pattern = pattern
# 通过easyxf()设置样式
style2 = xlwt.easyxf('font:bold on,colour_index 5;align: vert center,horiz center')
# 增加内容
ws.write(1,1,'吕小布')
ws.write(2,2,'吕小布',style1)
ws.write(3,3,'吕小布',style2)
# 保存数据
wb.save('./create_data/06_excel样式_背景颜色.xlsx')
Python操作Excel的一个常用库openpyxl,openpyl是第3方模块 库,可以方便的对excel执行读取与写入操作
安装
pip install openpyxl
常用方法与属性
# pip install openpyxl
from openpyxl import load_workbook
def open_excel():
# 打开excel文件
wb = load_workbook('./base_data/data01.xlsx')
# 获取工作薄
ws1 = wb.active
ws2 = wb['Sheet1']
ws3 = wb.get_sheet_by_name('Sheet1') # DeprecationWarning 被抛弃,不推荐使用
print(ws1)
print(ws2)
print(ws3)
print(ws1 is ws2 is ws3)
def show_sheets():
# 打开excel文件
wb = load_workbook('./base_data/data01.xlsx')
print(wb.sheetnames)
for ws in wb:
print(ws.title)
def get_one_value():
# 打开excel文件
wb = load_workbook('./base_data/data01.xlsx')
ws = wb.active
value1 = ws.cell(3,3).value # 数字是从1开始记数
value2 = ws['c3'].value
print(value1)
print(value2)
def get_many_value():
# 打开excel文件
wb = load_workbook('./base_data/data01.xlsx')
ws = wb.active
# 获取范围的单元格
cells = ws['c1':'c5']
print(cells)
# 获取整行,整列
cell_rows_6 = ws[6]
cell_cols_c = ws['C']
print(cell_rows_6)
print(cell_cols_c)
# 获取部分行
cell_rows_6_10 = ws[6:10]
print(cell_rows_6_10)
def get_many_value2():
# 打开excel文件
wb = load_workbook('./base_data/data01.xlsx')
ws = wb.active
for row in ws.iter_rows(min_row=11,max_row=15,max_col=4,min_col=3):
for cell in row:
print(cell)
def get_all_data_row():
# 打开excel文件
wb = load_workbook('./base_data/data01.xlsx')
ws = wb.active
for row in ws.rows:
for cell in row:
print(cell)
def get_all_data_col():
# 打开excel文件
wb = load_workbook('./base_data/data01.xlsx')
ws = wb.active
for col in ws.columns:
for cell in col:
print(cell)
def get_num():
# 获取总行号,列号
# 打开excel文件
wb = load_workbook('./base_data/data01.xlsx')
ws = wb.active
print(ws.max_column)
print(ws.max_row)
if __name__ =='__main__':
# open_excel()
# show_sheets()
# get_one_value()
# get_many_value()
# get_many_value2()
# get_all_data_row()
# get_all_data_col()
get_num()
常用方法与属性
from openpyxl import Workbook
def create_excel():
# 创建excel
wb = Workbook()
# 激活第1个工作薄
ws1 = wb.active
# 创建工作薄
ws2 = wb.create_sheet('数据')
# 在指定位置创建工作薄、
ws3 = wb.create_sheet('人员',0)
# 保存数据
wb.save('./create_data/09_创建excel文件.xlsx')
def set_value1():
# 创建excel
wb = Workbook()
# 激活第1个工作薄
ws1 = wb.active
# 写入数据
ws1['A1'] = 'Hello'
ws1['B2'] = 'Excel'
ws1['C3'] = 'Python'
# 保存数据
wb.save('./create_data/10_创建excel文件_写入数据.xlsx')
def set_value2():
# 创建excel
wb = Workbook()
# 激活第1个工作薄
ws1 = wb.active
# 需要写入的数据
data = ['Hello','Excel','Python']
for i,d in enumerate(data):
ws1.cell(i+1,i+1).value = d # 注意 openpyxl里面 记数是从1开始
# 保存数据
wb.save('./create_data/11_创建excel文件_写入数据2.xlsx')
def set_value3():
# 创建excel
wb = Workbook()
# 激活第1个工作薄
ws1 = wb.active
# 需要写入的数据
data = ['Hello','Excel','Python']
# 把数据追加到工作薄
ws1.append(data)
# 保存数据
wb.save('./create_data/12_创建excel文件_写入数据3.xlsx')
if __name__ == '__main__':
# create_excel()
# set_value1()
# set_value2()
set_value3()
常用方法与属性
from openpyxl import Workbook
from openpyxl.styles import Font,colors,Alignment
def set_font():
'''
设置字体样式
'''
wb = Workbook()
ws = wb.active
ws['A1'] = 'Hello'
ws['B2'] = 'Python'
ws['C3'] = 'Excel'
# 创建一个字体样式对象
ft = Font(name='微软雅黑',size=30,italic=True,bold=True,color=colors.BLUE)
ft2 = Font(name='微软雅黑',size=30,italic=True,bold=True,color='CDAD00')
# 将字体的样式应用到单元格
ws['B2'].font = ft
ws['C3'].font = ft2
# 保存数据
wb.save('./create_data/13_openpyxl_字体样式.xlsx')
def set_aligment():
'''
设置内容对齐方式
'''
wb = Workbook()
ws = wb.active
ws['A1'] = 'Hello'
ws['B2'] = 'Python'
ws['C3'] = 'Excel'
# 创建一个对齐方式对象
aligment = Alignment(horizontal='left',vertical='top')
aligment2 = Alignment(horizontal='right',vertical='bottom')
# 设置单元格的宽与高
ws.row_dimensions[1].height = 50
ws.column_dimensions['A'].width = 50
ws['B2'].alignment = aligment
ws['C3'].alignment = aligment2
# 保存数据
wb.save('./create_data/14_openpyxl_位置样式.xlsx')
if __name__ =='__main__':
# set_font()
set_aligment()
from openpyxl import Workbook
from openpyxl.styles import Border,Side,colors,PatternFill
def set_border():
'''
设置边框样式
'''
wb = Workbook()
ws = wb.active
ws['A1'] = 'Hello'
ws['B2'] = 'Python'
ws['C3'] = 'Excel'
# 创建一个线的样式对象
side = Side(color=colors.BLUE,style='medium')
side2 = Side(color='00008000',style='double')
# 创建边框样式对象
border = Border(left=side,right=side2,top=side,bottom=side2)
# 将边框样式应用到单元格
ws['B2'].border = border
# 保存数据
wb.save('./create_data/15_openpyxl_边框样式.xlsx')
def set_pattern():
'''
设置背景颜色
'''
wb = Workbook()
ws = wb.active
ws['A1'] = 'Hello'
ws['B2'] = 'Python'
ws['C3'] = 'Excel'
# 创建背景的样式对象
pattern = PatternFill('solid',fgColor=colors.BLUE)
# 将背景颜色样式应用单元格, 不要用pattern属性
ws['B2'].fill = pattern # AttributeError: 'Cell' object has no attribute 'pattern'
# 保存数据
wb.save('./create_data/16_openpyxl_背景样式.xlsx')
if __name__ =='__main__':
# set_border()
set_pattern()
常用方法与属性
from openpyxl import Workbook
def merge_cell():
'''
合并单元格
'''
wb = Workbook()
ws = wb.active
# 合并操作 A1:A5 合并一列
ws.merge_cells('A1:A5')
# 合并操作 A1:A5 合并一行
ws.merge_cells('c1:h1')
# 合并操作 A1:A5 合并多行,多列
ws.merge_cells('c4:h8')
# 注意:从小到大,从上到下,从前到后
# 保存数据
wb.save('./create_data/17_合并单元格.xlsx')
if __name__ =="__main__":
merge_cell()