目录
Excel自动化处理
办公自动化是将现代办公和计算机技术结合起来的一种新型办公方式。
office家族其实都可以用VBA解决自动化的问题。
Python针对Excel有很多第三方库可以使用,比如xlwings、xlsxwriter、xlrd、xlwt、pandas、xlsxwriter、win32com、xlutils等等。
这些库都可以很方便地实现对excel文件的增删改写,格式修改等。当然这些不用全部去学,需要的时间成本太大了。
类型 | xlrd、xlwt、xlutils | XlsxWriter | openpyxl | excel开放接口 |
---|---|---|---|---|
读取 | √ | × | √ | √ |
写入 | √ | √ | √ | √ |
修改 | √ | × | √ | √ |
xls | √ | × | × | √ |
xlsx | 高版本 | √ | √ | √ |
大文件 | × | √ | √ | √ |
效率 | 快 | 快 | 快 | 慢 |
功能 | 较弱 | 强大 | 一般 | 超强大 |
写入数据-xlwt模块
安装
pip install xlwt
常用方法
函数名 | 含义 |
---|---|
xlwt.Workbook() | 创建一个新的excel文件 |
xlwt.add_sheet(sheet_name) | 创建一个新的工作簿 |
sheet.write(row,col,data) | 向单元格中编写数据 |
workbook.save(path) | 保存数据到文件 |
下面我们写一段代码来试试吧
import xlwt
# 注意,文件名称不能和导入的模块名相同
# 创建一个excel
wb = xlwt.Workbook()
# 选择工作簿
sh1 = wb.add_sheet("电影")
# 添加数据
# sh1.write(row,col,"电影名称"),行列都是从0开始
# 增加第一行数据
sh1.write(0,0,"电影名称")
sh1.write(0,1,"综合票房")
sh1.write(0,2,"票房占比")
sh1.write(0,3,"排片场次")
# 增加第二行数据
sh1.write(1,0,"你好李焕英")
sh1.write(1,1,1000)
sh1.write(1,2,"33.3")
sh1.write(1,3,"1000")
# 保存数据
wb.save("./create_data/01_电影数据.xlsx")
现在就创建了一个excel文件了。
读取数据-xlrd模块
安装
pip install xlrd
常用方法和属性
函数名/属性 | 含义 |
---|---|
xlrd.open_workbook(path) | 打开一个文件 |
workbook.nsheets | 获取工作簿数量 |
workbook.sheets() | 获取所有工作簿 |
workbook.sheet_name() | 获取工作簿名 |
sheet.sheet_by_index(num) | 获取第num个工作簿 |
sheet.sheet_by_name(name) | 根据工作簿名获取 |
sheet.nrows | 获取工作簿总行数 |
sheet.row_values(num) | 获取指定行数据 |
sheet.cell(row,col) | 获取指定单元格 |
sheet.row(num)[col] | 获取指定单元格 |
cell.value | 获取单元格的值 |
cell.ctype | 获取单元格内容的数据类型 |
sheet.cell_value(row,col) | 获取指定单元格的值 |
下面我们写一段代码来试试吧
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(f"sheet中有{ws1.nrows}行,{ws1.ncols}列数据")
# 获取单个单元格
print(f"第二行第二列数据的值是{ws1.cell_value(1,1)}")
print(f"第二行第二列数据的值是{ws1.cell(1,1).value}")
print(f"第二行第二列数据的值是{ws1.row(1)[1].value}")
# 获取多个单元格
print(f"第一行的数据是{ws1.row_values(0)}")
print(f"第一列的数据是{ws1.col_values(0)}")
# 获取整个sheet
for r in range(ws1.nrows):
for c in range(ws1.ncols):
# 因为索引是从0开始的,所以将行列加一
print(f"第{r+1}行第{c+1}列的数据为:{ws1.cell_value(r,c)}")
更新数据-xlutils
更新数据的方案:
-
获取数据源重新写一遍
-
直接在原数据上写新数据(推荐)
安装
pip install xlutils
常用方法和属性
函数名 | 含义 |
---|---|
xlutils.copy.copy(workbook) | 复制excel文件 |
代码
from xlutils.copy import copy
import xlrd
# 读取文件
rb = xlrd.open_workbook("./create_data/01_电影数据.xlsx")
# 复制文件
wb = copy(rb)
# 修改数据
# 获取excel中第一个工作簿
ws = wb.get_sheet(0)
# 增加数据
ws.write(4,0,"新增电影")
ws.write(4,1,111)
ws.write(4,2,32)
ws.write(4,3,1110)
# 增加信息
rs = rb.sheet_by_index(0)
count = 0
for r in range(1,rs.nrows):
num = rs.cell_value(r,3)
# 累加排场次数
count += int(num)
# 增加一个新的工作簿
new_ws = wb.add_sheet("汇总数据")
new_ws.write(0,0,"总排场次数")
new_ws.write(0,1,count)
# 保存数据
wb.save("./create_data/02_更新电影数据.xlsx")
excel设置样式
常用方法和属性
函数/属性名 | |
---|---|
xlwt.Font() | 创建字体样式 |
font.name | 设置字体类型 |
font.color_index | 设置字体颜色 |
font.height | 设置字体大小 |
font.bold | 加粗字体 |
font.underline | 下划线 |
font.italic | 斜体 |
xlwt.Alignment() | 设置字体位置样式 |
alignment.horz | 设置字体横向位置#1左2中3右 |
alignment.vert | 设置字体纵向位置#0上1中2下 |
row.height_mismatch | 设置是否开启行高(True为开启) |
row.height | 设置单元格行高,值为256*像素点 |
col.width | 设置单元格宽度,值为256*像素点 |
xlwt.Borders() | 设置边框样式 |
border.left | 设置左边框粗细 |
border.right | 设置右边框粗细 |
border.left_color | 设置左边框颜色 |
xlwt.Background() | 设置背景颜色 |
xlwt.XFStyle() | 设置总样式对像,用于应用到单元格 |
xlwt.easyxf() | 是指总样式对象 |
代码
import xlwt
# 创建一个文件
wb = xlwt.Workbook()
# 创建一个工作簿
ws = wb.add_sheet("数据")
# 设置样式
ft = xlwt.Font()
ft.name = "楷体" # 字体样式
ft.height = 20*20 # 字体大小
ft.bold = True # 字体加粗
ft.underline = True # 下划线
ft.italic = True # 斜体
ft.colour_index = 2 # 设置字体颜色
# 创建样式对象
style1 = xlwt.XFStyle()
style1.font = ft
# 增加内容
ws.write(0,0,"唐僧")
ws.write(1,1,"孙悟空",style1)
# 保存数据
wb.save("./create_data/03_excel样式练习.xls")