Excel 的基础用法。手工如何操作 Excel, python 学习手工如何操作Excel
手工操作 Excel 的流程
1, 打开Excel 文件 (路径 + 文件名)
2, 获取表单
3, 使用行号,和列号去确定需要读取的数据
4, 关闭文件
python 操作 Excel, 工具
- openpyxl, 支持 xlsx 新型格式的读写, 读取速度还可以。
- tablib, 支持多种格式读写。 xlsx, xls, csv, json, yaml, html, pd
- xlrd, 经典的 Excel 读取库,
- xlwt,
- pandas, 功能强,太臃肿了
安装: pip install openpyxl
获取表单:
1,wb.active, 被选中,被激活
2,通过索引, wb.worksheets[索引]
3,通过sheet名字, wb[‘sheet_name’]
实例代码:
import openpyxl
# 读取 Excel 文件夹
# 读取文件之前一定要关闭该文件
# windows下面的路径有反斜杠
# 得到一个 Workbook 对象
wb = openpyxl.load_workbook(r'd:\cases.xlsx')
print(wb)
# 不直接去获取_sheets 属性,称为私有属性。
print(wb._sheets) # self._sheets
# active 是表示被激活,被选择的 sheet
active_sheet = wb.active
# sheetnames 和 _sheets 有什么区别??
# sheetnames 列表当中存储的是字符串, _sheets 里面存储是对象。
# 获取所有表单的正确用法
# wb.worksheets
# # 获取某一个表单,
#1, 通过索引去获取
sheet = wb.worksheets[0]
#TODO 2.正规用法(提倡使用的方法)
# sheet = wb['Sheet1']
# print(sheet)
# Pycharm 不支持 sheet.属性的提示。
# 读取单个单元格, 行和列
# 行和列是从 1 开始的,不是 python 当中从 0 开始
cell = sheet.cell(1, 2)
print(cell)
#
# # 获取 cell 的值, 很多同学会忘记加上 value
print(cell.value)
#
# # 获取某一行
print(sheet[1])
# # 获取值:
for column in sheet[1]:
print(column.value)
#
#
# # 获取某一列
print(sheet['A'])
#
# # 如何获取多行。 1 到 3 行, 第三行是包含的。
print(sheet[1:3])
# 获取所有t的数据
toal_data = list(sheet.rows)
print(toal_data)
for row in toal_data:
for cell in row:
print(cell.value)
# 写称类
# 写入。一个单元格,
# 保存, save("文件名称")
wb.save(r'd:\cases.xlsx')
# 关闭
wb.close()
对处理excel的功能进行封装成模块,对有需求处理表格的可以调用这个模块的功能:
excel_handler.py模块具有以下功能:
1、打开表单
2、读取标题 头部
3、读取所有的数据
4、指定单元格写入数据(使用静态方法,不要使用实例方法)
代码如下:
"""
1、打开表单
2、读取标题 头部
3、读取所有的数据 (类型是)
4、指定单元格写入数据(使用静态方法,不要使用实例方法)
"""
from openpyxl import load_workbook
from openpyxl.worksheet.worksheet import Worksheet
class ExcelHandler():
"""操作 Excel """
def __init__(self, file):
"""初始化函数"""
self.file = file
# self.wb = load_workbook(file)
def open_sheet(self, name) -> Worksheet:
"""打开表单.
在函数或者方法的后面 加 -> 类型:表示此函数返回值是一个 这样的类型
函数注解。
"""
wb = load_workbook(self.file)
sheet = wb[name]
wb.close()
return sheet
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)
# 获取标题
data = []
for row in rows[1:]:
row_data = []
for cell in row:
row_data.append(cell.value)
# 列表转成字典:要和 header 去 zip
data_dict = dict(zip(self.header(sheet_name), row_data))
data.append(data_dict)
return data
@staticmethod
def write(file, sheet_name, row, column, data):
"""写入 Excel 数据"""
wb = load_workbook(file)
sheet = wb[sheet_name]
# 修改单元格
sheet.cell(row, column).value = data
# 保存
wb.save(file)
# 关闭
wb.close()
if __name__ == '__main__':
excel = ExcelHandler(r'd:\cases.xlsx')
excel.write(r'd:\cases.xlsx', 'Sheet1', 5, 1, 'data_value')
# 读取表中数据
dd=excel.read("Sheet1")
print(dd)
#获取表头信息
hh = excel.header("Sheet1")
print(hh)