背景:使用openpyxl操作excel数据
一、读取excel数据
首先要安装: pip install openpyxl
导入:from openpyxl import Workbook, load_workbook
from openpyxl.chart import BarChart3D, Reference
1.创建一个workbook对象,用来操作excel
wb = load_workbook(filename=r"文件路径+文件名")
2.获取工作表sheet1对象
ws = wb['Sheet1']
3.获取指定range的数据
ranges = ws['A1:K10']
4.输出每个单元格的数据
for row in ranges:
for cell in row:
print(cell.value)
二、使用画图功能
1.创建一个图标对象
chart = BarChart3D()
2.设置图表格式
chart.title = '成绩统计'
3.选择图表标题和数据
titles = reference(ws, range_string='Sheet1!B2:B10')
data = reference(ws, range_string='sheet1!c2:D10')
向图表中添加数据
chart.add_data(data)
设置categories(titles)
chart.set_categories(titles)
4. 把画好的图表添加到excel的指定位置
ws.add_chart(chart,'M3')
wb.save('成绩单.xlsx')
三. 使用openpyxl实现读取excel中的测试数据
import openpyxl
class HandleExcel(object):
# 初始化方法,设置文件名和读取的sheet名参数
def init(self, filename, sheet_name=None):
self.filename = filename
if sheet_name is None:
self.sheet_name = 'sheet1'
else:
self.sheet_name = sheet_name
# 创建读取excel数据方法
def read_data():
wb = openpyxl.loadWorkbook(self.filename) # 创建文件对象,读取指定文件
ws = wb[self.sheet_name] # 指定读取表格的sheet对象
cases = [] # 定义一个空的cases列表用来接收每行的用例数据
titles = [] # 定义一个空的列表用来接收用例标题
for i,row in enumerate(ws.rows): # ws.rows方法是可以遍历sheet对象中的所有行
if i is 0:
for cell in row:
titles.append(cell.value)
else:
cases.append(dict(zip(titles,[cell.value for cell in row])))
return cases
# 定义一个保存数据到excel的函数
def write_data(row, column, value):
wb = openpyxl.loadworkbook(self.filename)
ws = wb[self.sheet_name]
ws.cell(row, column, value) # 把数据写入对应表格
wb.save() # 保存表格数据
if name == 'main':
cases = HandleExcel(fielname, sheet_name).read_data()
四.openpyxl模块基本方法总结(这部分参考:https://blog.csdn.net/weixin_43094965/article/details/82226263)
1.安装:pip install openpyxl
2.打开文件
(1)创建:from openpyxl import Workbook
wb = Workbook() # 创建一个wb对象
ws = wb.active # 激活工作表
(2)打开已有的excel:from openpyxl import load_workbook
wb2 = load_workbook(filename文件路径)
(3)存储数据:
ws['A1'] = 42
ws.append([1,2,3])
(4)创建表:sheet
ws1 = wb.create_sheet("Mysheet") # 默认插到最后
ws2 = wb.create_sheet("Mysheet", 0) # 插入到最开始的位置
(5)选择表(sheet)
ws3 = wb['sheetname']
ws4 = wb.get_sheet_by_name('sheetname')
(6) 查看表名:wb.sheetnames for sheet in wb
(7) 单一单元格访问:
c = ws['A1'] d = ws.cell(row,column,value)
获取每一行每一列
for row in sheet.rows for column in sheet.columns