openpyxl 模块简介:
openpyxl 模块可以读写Excel 文件,包括xlsx、xlsm、xltx和xltm等格式
openpyxl 模块 安装
执行如下安装命令:
pip install openpyxl
openpyxl 模块涉及主要概念:
Workbook:代表一个Excel 工作表
Worksheet:代表一个Excel 工作表中的一页(sheet)
Cell:代表最简单的一个单元格
Workbook 对象涉及属性和方法:
Workbook 对象涉及属性如下:
active: 获取当前活跃的Worksheet
worksheets: 以列表的形式返回所有Worksheet
read_only: 判断是否以read_only 模式打开excel 文档
encoding:获取文档的字符集编码
properties: 获取文档的元数据,如标题、创建者、创建日期等
Workbook 对象涉及方法如下:
get_sheet_names:获取所有表格的名称(该方法已经被废弃,推荐使用:通过Workbook 的sheetnames 属性即可获取)
get_sheet_by_name:通过表格名称获取WorkSheet对象(该方法已经被废弃,推荐使用:通过Worksheet['表名']获取)
get_active_sheet: 获取活跃的表格
remove_sheet:删除一个表格
create_sheet:创建一个表格
copy_worksheet:在Workbook 内复制表格
Worksheet 对象涉及属性和方法:
Worksheet 对象涉及相关属性
title:表格的标题
dimensions:表示表格的大小,这里的大小是指数据的表格大小,即,左上角的坐标和右下角的坐标
max_row:表格最大行数
min_row:表格最小行数
max_column:表格最大列数
min_column:表格最小列数
rows:按行获取单元格
columns:按列获取单元格
freeze_panes:冻结窗口
values:按行获取表格内容
Worksheet 对象涉及相关方法
iter_rows:按行获取所有单元格,内置属性有:min_row、max_row、min_col和max_col
iter_columns:按列获取所有单元格
append:在表格末尾添加数据
merged_cells:合并多个单元格
unmerged_cells:移除合并的单元格
Cell 对象涉及属性和方法:
Cell 对象涉及相关属性
row: 单元格所在的行
column: 单元格所在的列
value: 单元格的值
coordinate:单元格的坐标
openpyxl 实战
openpyxl 实战之简单excel 文件读取
from openpyxl import load_workbook
# 打开excel指定excel 文件
wb = load_workbook("E:\demo.xlsx")
# 输出excel 文本包含所有sheet
print(wb.sheetnames)
# 输出指定sheet
sheet = wb.get_sheet_by_name("Sheet1")
# 读取sheet 最大行数
print(sheet.max_row)
# 读取sheet 最大列数
print(sheet.max_column)
# 读取指定Sheet 内容的Cell
print(sheet["A1"])
# 读取Cell 的值
print(sheet["A1"].value)
# 遍历输出sheet 指定列
for i in sheet["A"]:
print(i.value, end="")
openpyxl 实战之数据写入指定excel 文件中
import openpyxl
import time
# 定义数据
ls = [['周晨曦', '2', '肉肉', '广东省.深圳市', '男'], ['王梓暲', '2', '森宝', '上海市', '女']]
# 时间格式定义
time_format = '%Y-%m-%d_%H:%M:%S'
time_current = time.strftime(time_format)
# 定义保存excel 文件方法
def saveexcel(data, sheetname, wbname):
print("数据写入指定excel 文件")
# 打开指定excel 文件
wb = openpyxl.load_workbook(filename=wbname)
# 关联excel 活动sheet
sheet = wb.active
# 获取sheet 最大行数
max_row = sheet.max_row
# 指定新数据写入指定行
row = max_row + 3
# 计算当前数据的长度
data_len = row + len(data)
# 数据写入
for data_row in range(row, data_len):
for data_cell in range(2, 7):
_ = sheet.cell(row=data_row, column=1, value=str(time_current))
_ = sheet.cell(row=data_row, column=data_cell, value=str(data[data_row - data_len][data_cell -2]))
# 保存数据
wb.save(filename=wbname)
print('excel 文件保存成功')
saveexcel(ls,"Sheet1","E:\demo.xlsx")
效果截图:
openpyxl 实战之指定数据写入excel 文件中,并生成对应图表
from openpyxl import Workbook
from openpyxl.chart import (
AreaChart,
Reference,
Series
)
wb = Workbook()
ws = wb.active
rows = [
['地区', '最低工资', '最高工资', '平均工资'],
['广东', '2790', '66780', '8790'],
['上海', '3400', '54000', '9800'],
['北京', '4200', '117890', '10780'],
['江苏', '2600', '35000', '6780'],
]
for row in rows:
ws.append(row)
chart = AreaChart()
chart.title = "工资区域统计表"
chart.style = 13
chart.x_axis.title = "地区"
chart.y_axis.title = "工资水平"
cats = Reference(ws, min_col=1, min_row=1, max_row=7)
data = Reference(ws, min_col=2, min_row=1, max_row=7, max_col=3)
chart.add_data(data, titles_from_data=True)
chart.set_categories(cats)
ws.add_chart(chart, "A10")
wb.save("E:\chart.xlsx")