介绍
xls和xlsx的区别
总结:通常xlsx更好,用它就行
- 文件结构:xls文件是以二进制格式存储的,而xlsx文件则是基于开放文档标准的xml文件格式,数据以分层结构存储
- 文件大小:xls文件体积相对较大,而xlsx文件采用了更高效的压缩算法,文件大小通常比xls格式小得多
- 存储容量:xlsx 格式可以存储更多的数据
- 功能差异:xlsx 格式支持更多的函数和公式
基本概念
- workbook: excel表格的顶层容器,包含一个或者多个工作表,通常用
openpyxl.load_workbook(path)
打开 - sheet:工作表,一个excel可能有多个,很多人看excel都不注意这个,常常导致漏看
- row,column:行和列,行号从1开始(不是0,不是0),列号从A开始
代码
获取全表内容
- 单元格不是基本数据类型,而是
<class 'openpyxl.cell.cell.Cell'>
,不能直接得到value,有两种简单的方法sheet.iter_rows(values_only=True)
cell.value
- 空格,跳行获取到的都是None
def read_xlsx_excel(path, sheet_name):
'''
读取xlsx格式文件
:param path:路径
:param sheet_name:sheet名
'''
workbook = openpyxl.load_workbook(path)
sheet = workbook[sheet_name]
data = []
# 遍历表格的每一行
for row in sheet.iter_rows():
# 初始化一行数据的列表
temp_row = [cell.value for cell in row]
data.append(temp_row)
return data
获取指定行
- 行号从1开始,输入的列表为指定列(比如:[1,2])
- 如果想要获取每行从b到d的内容,用切片就行,temp_row[1:3]
def read_specific_rows_from_excel(path, sheet_name, row_indices: List[int]):
'''
从xlsx格式文件的指定工作表中读取特定行的内容
:param path: Excel文件的路径
:param sheet_name: 要读取的工作表名
:param row_indices: 一个包含要读取的行索引的列表(行号从1开始)
:return: 一个列表的列表,其中每个内部列表包含一行中的数据
'''
workbook = openpyxl.load_workbook(path)
sheet = workbook[sheet_name]
data = []
# 遍历指定的行索引
for row_index in row_indices:
# 访问指定行,注意openpyxl中的行索引从1开始
temp_row = [cell.value for cell in sheet[row_index]]
# 将获取到的行数据添加到结果列表中
data.append(temp_row)
return data
获取指定列
- 这个函数和上面的函数一毛一样,但注意,输入的列表变成了指定行(比如:[“A”,“B”])
def read_specific_columns_from_excel(path, sheet_name, column_indices: List[str]):
'''
从xlsx格式文件的指定工作表中读取特定行的内容
:param path: Excel文件的路径
:param sheet_name: 要读取的工作表名
:param column_indices: 一个包含要读取的列索引的列表(行号从A开始)
:return: 一个列表的列表,其中每个内部列表包含一列中的数据
'''
workbook = openpyxl.load_workbook(path)
sheet = workbook[sheet_name]
data = []
# 遍历指定的行索引
for column_index in column_indices:
# 访问指定行,注意openpyxl中的行索引从1开始
temp_column = [cell.value for cell in sheet[column_index]]
# 将获取到的行数据添加到结果列表中
data.append(temp_column)
return data
新建并写入
def write_xlsx_excel(path, sheet_name, rows_data):
"""
写入xlsx格式文件
:param path: Excel文件的保存路径
:param sheet_name: 工作表的名称
:param rows_data: 二维数组,包含要写入的行数据
"""
workbook = openpyxl.Workbook()
sheet = workbook.create_sheet(title=sheet_name)
# 整行写入
for row in rows_data:
sheet.append(row)
workbook.save(path)
写入指定行
workbook = openpyxl.load_workbook('example.xlsx')
sheet = workbook['Sheet']
# 二维数组
sheet.cell(row=2, column=4, value="写入指定")
workbook.save('example.xlsx')