办公自动化是将现代化办公和计算机技术结合起来的一种新型的办 公方式 office 家族其实都可以用 VBA 解决自动化的问题,但可能很多人不 会用 python 针对 excel 有很多的第三方库可以用,比如 xlwings、 xlsxwriter、xlrd、xlwt、pandas、 xlsxwriter、win32com、xlutils 等等 这些库可以很方便地实现对 excel 文件的增删改写、格式修改等, 当然并不推荐你全部都去学 尝试一下,这样时间成本太大了
xlrd:用于读取 Excel 文件;
xlwt:用于写入 Excel 文件;
xlutils:用于操作 Excel 文件的实用工具,比如复制、分割、筛选等
Excel写入数据-xlwt
安装
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')
Excel读取数据-xlrd
安装
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)}')
Excel更新数据-xlutils
安装
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')
Excel设置样式
常用方法与属性
设置字体
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')
Excel读取数据-openpyxl
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()
Excel写入数据-openpyxl
常用方法与属性
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()
Excel写入样式-openpyxl
常用方法与属性
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()
Excel合并单元格-openpyxl
常用方法与属性
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()