Excel 的基础用法,手工如何操作Excel, 手工操作excel的流程 1、打开Excel文件,(路径+文件名) 2、获取sheet表单 3、使用行号和列号 确定需要读取的数据 4、关闭文件 两个工具 openpyxl,支持xlsx 新型格式的读写,读取速度还可可以 tablib,支持多种格式读写, xlsx、xls、cvs、json、yaml、html,缺点读取速度慢 xlrd, 经典excel 读取库,局限性强,只能读取,不能写 pandas ,功能强大,太臃肿了,搞数据分析的时候可以用 安装openpyxl pip install openpyxl
openpyxl
1、获取workbook
2、获取sheet
3、获取单元格,获取行和列,cell、row、column
# 读取Excel文件
# 读取文件之前,一定要关闭文件
# windows 下面的路径有反斜杠
wb = openpyxl.load_workbook('d:\cases.xlsx')
# active 是表示被激活的,被选择的
sheet active_sheet = wb.active
# sheetnames 列表当中存储的是字符串, _sheets里面存储的是对象
# 获取所有表单的正确用法
work_sheets = wb.worksheets
# 获取某一个表单,1、通过索引去获取
# sheet = wb.worksheets[0]
# print(sheet)
# 2、通过表单名称获取 # 过时,sheet.没有提示
# sheet = wb.get_sheet_by_name('Sheet1')
# print(sheet)
# 正确用法, sheet. 没有提示 sheet = wb['Sheet1']
# 读取单个单元格,行和列
# 行和列 是从1 开始的,不是python当中的 从0 开始的
# 可以从源码看出,第一个入参是行,第二个入参是列 cell = sheet.cell(1, 2) print(cell)
# cell是一个对象,获取cell的值 print(cell.value)
# 获取某一行的数据 print(sheet[1])
# 获取某一行的值 for columm in sheet[1]: print(columm.value)
# 获取某一列 print(sheet['C'])
# 获取多行 1到3 行,第3行是包含的 print(sheet[1:3])
# 获取所有数据
total_data = list(sheet.rows)
print(total_data)
for row in total_data:
for cell in row:
print(cell.value)
# 写入, 一个单元格
# 保存,save('文件名称')
wb.save(r'd:\cases.xlsx')
# 关闭
wb.close()
封装Excel
excel_handler.py
import openpyxl
from openpyxl.worksheet.worksheet import Worksheet
class ExcelHandler():
def __init__(self, file):
self.file = file
def open_sheet(self, name) -> Worksheet:
"""
在方法后面加 -> 指向类型,代表这个方法返回的类型是这个
加了Worksheet 类,下面的sheet就会有提示
:param name:
:return:
"""
wb = openpyxl.load_workbook(self.file)
sheet_name = wb[name]
return sheet_name
# 获取表头数据
def header(self, sheet_name):
sheet = self.open_sheet(sheet_name)
headers = []
for i in sheet[1]:
headers.append(i.value)
return headers
# 获取所有数据
def read(self, sheet_name):
sheet = self.open_sheet(sheet_name)
rows = list(sheet.rows)[1:]
data = []
for row in rows:
data_row = []
for cell in row:
data_row.append(cell.value)
# 是以列表形式存储的
data.append(data_row)
return data
# 写入数据
@staticmethod
def write(file, sheet_name, row, column, new_data):
wb = openpyxl.load_workbook(file)
sheet = wb[sheet_name]
sheet.cell(row, column).value = new_data
wb.save(file)
wb.close()
if __name__ == '__main__':
excel = ExcelHandler(r'd:\cases.xlsx')
# data = excel.read('Sheet1')
excel.write(r'd:\cases.xlsx', 'Sheet1', 3, 1, 'data_new')
# print(data)
用字典的形式存储
# 获取所有数据
def read(self, sheet_name):
sheet = self.open_sheet(sheet_name)
rows = list(sheet.rows)[1:]
data = []
for row in rows:
data_row = []
for cell in row:
data_row.append(cell.value)
# 用字典的形式存储
# 列表转成字典,要和header 去zip
data_dict = dict(zip(self.header(sheet_name), data_row))
data.append(data_dict)
return data