python如何读取excel表格数据

发布时间:2024年01月15日

excel的格式

excel有xls和xlsx两种格式,他们的区别在于

  • 文件格式不同:xls是一个特有的二进制格式,其核心结构是符合文档类型的机构,而xlsx的核心结构是xml类型的结构,采用的事基于xml的压缩方式,使其占用的空间更小。xlsx中最后一个x的意义就在于此。
  • 兼容性不同,xlsx格式是向下兼容的,可以兼容xls格式。
  • python自带的模块中有针对xls格式的xlrd和xlwt模块,但是这两个库仅仅针对xls的操作,当我们要操作xlsx格式文件时,则需要使用到openpyxl第三方库
    在这里插入图片描述

xls格式文件

python中对xls格式文件相关的包有三个:xlrd、xlwt和xlutils

  • xlrd只能读取文件,不能写入文件
  • xlwt只能写入文件,不能读取文件
  • xlutils通过.copy.copy方法,将xlrd读取的文件复制给xlwt处理,相当于在xlrd和xlwt之间架起一座桥梁

xlrd

# xls
import xlrd

path='11.xls'
index=0
sheetname='sheet1'
# 打开文件,绝对路径或者相对路径,找不到文件会报错
workbook=xlrd.open_workbook(path)
# 获取文件中所有的sheet对象
sheets=workbook.sheets()
# 获取文件中所有的sheet名称,返回名称列表
names=workbook.sheet_names()
# 获取一个文件中有多少对象
n=workbook.nsheets

# 获取对应索引的对象,索引从0开始
sheet_index=workbook.sheet_by_index(index)
# 获取指定工作表的表名
name=sheet_index.name

# 获取对应名字的对象
sheet_name=workbook.sheet_by_name(sheetname)
print(sheet_name)


# 获取xls的行和列的数量
nrows=sheet_index.nrows
ncols=sheet_index.ncols

# 获取工作表对应行和列的单元格组成的列表
# 元素的格式是 数值类型:对应数据
row_list=sheet_index.row(0)
print(row_list,'\n')
row_list=sheet_index.row(1)
# print(row_list,'\n')
col_list=sheet_index.col(2)
# print(col_list,'\n')


# 取出工作表对应行和列的值组成的列表
row_value=sheet_index.row_values(-1)# 最后一行
print(row_value,"\n")
col_value=sheet_index.col_values(0)

# 输出行和列
row_type=sheet_index.row_types(6)# 数据类型:0.空,1.字符串,2.数字,3.日期,4.布尔,5.error
print(row_type,"\n")
col_type=sheet_index.col_types(1)

# 根据索引值,返回该行的长度,列没有对应操作
len=sheet_index.row_len(1)


# 对单元格进行操作
# 根据行列的索引,返回单元格的数据 数据类型:对应数据
di=sheet_index.cell(0,1)
print(di,"\n")

# 返回单元格的数据
ty=sheet_index.cell_value(0,1)
ty=sheet_index.cell(0,1).value
ty=sheet_index.row(0)[1].value

运行结果

在这里插入图片描述

xlwt

import xlwt

name='sheet1'
new_workbook=xlwt.Workbook('utf-8')
# 在工作簿中添加一个工作表,如果不添加会报错
new_sheet=new_workbook.add_sheet(name)

# 添加内容
row=0
col=0
text='11111'
new_sheet.write(row,col,text)
# 保存
file_path='11.xls'
new_workbook.save(file_path)

excel读取xls类型数据三个方法

可以通过一下方法,对xls数据进行读取、写入和追加写入

import xlrd
import xlwt
from xlutils.copy import copy

# 读取xls格式的文件,读取全部的数据,以最大的行和最大的列来计算
def read_xls_all(url,index):
    '''
    url:文件的路径
    index:第几个工作表,从1开始
    
    返回值:表格中的数据
    '''
    # 打开指定的工作簿
    workbook=xlrd.open_workbook(url)
    # 获取工作簿中所有的表格
    sheets=workbook.sheet_names()# sheets: ['Sheet1', 'Sheet2', 'Sheet3']
    print('sheets:',sheets)
    # 获取index的表格
    worksheet=workbook.sheet_by_name(sheets[index])
    
    datas=[]
    # 遍历每一行数据
    for i in range(0,worksheet.nrows):
        item=[]
        # 遍历每一列数据
        for j in range(0,worksheet.ncols):
            item.append(worksheet.cell_value(i,j))# 可以获取单个数据
        datas.append(item)
    return datas

# 往xls文件写入数据
def write_xls_excel(url,sheet_name,data):
    '''
    data必须是二维表
    '''
    # 创建工作簿对象
    workbook=xlwt.Workbook()
    # 创建一个工作表对象
    sheet=workbook.add_sheet(sheet_name)
    # 遍历每一行数据
    for i in range(0,len(data)):
        for j in range(0,len(data[i])):
            sheet.write(i,j,data[i][j])# 把原来所有的数据都清空,再写入数据
    
    workbook.save(url)
    print('写入成功')
    
# 以追加的形式写入xls
def write_xls_add(url,index,data):
    workbook=xlrd.open_workbook(url)
    sheets=workbook.sheet_names()
    worksheet=workbook.sheet_by_name(sheets[index])
    # 获取行数
    rows=worksheet.nrows
    # 将xlrd对象拷贝转化为xlwt对象
    new_workbook=copy(workbook)
    # 获取转化后工作簿中的第index个表格
    new_worksheet=new_workbook.get_sheet(index)
    # 遍历每一行数据
    for i in range(0,len(data)):
        for j in range(0,len(data[i])):
            # 追加数据
            new_worksheet.write(i+rows,j,data[i][j])
    # 保存工作簿
    new_workbook.save(url)
    print('追加数据成功')

xlsx格式文件

openpyxl

openpyxl不能凭空产生一个表格文件,但是xlwt可以,所以openpyxl需要传入一个excel文件

import openpyxl

# 读取xlsx格式文件
def read_xlsx_excel(url,sheet_name):
    '''
    读取xlsx格式文件
    返回值:表格中的数据
    '''
    # 使用openpyxl加载指定路径的excel文件并得到对应的workbook对象
    workbook=openpyxl.load_workbook(url)
    # 根据指定表名获取表格并得到对应的sheet对象
    sheet=workbook[sheet_name]
    data=[]
    # 遍历表格中的每一行
    for row in sheet.rows:
        da=[]
        for item in row:
            da.append(item.value)
        data.append(da)
    return data

# 写入数据
def write_xlsx_excel(url,sheet_name,data):
    '''
    写入xlsx格式文件
    会创建一个名为sheet_name的对象,把data写入,其他的全部清空
    '''
    # 创建工作簿
    workbook=openpyxl.Workbook()
    # 创建工作表对象
    sheet=workbook.active
    # 设置工作表的名字
    sheet.title=sheet_name
    
    # 遍历数据
    for i in range(0,len(data)):
        for j in range(0,len(data[i])):
            # 写入数据,注意openpyxl的行和列式从1开始的
            sheet.cell(row=i+1,column=j+1,value=data[i][j])
            
    
    # 保存
    workbook.save(url)
    print('写入成功')
    
    
    
# 追加写入xlsx格式文件
def write_xlsx_add(url,sheet_name,datas):
    '''
    追加数据
    '''
    # 使用openpyxl加载指定路径的excel文件并得到对应的workbook对象
    workbook=openpyxl.load_workbook(url)
    # 根据指定表名获取表格并得到对应的sheet对象
    sheet=workbook[sheet_name]
    # 增加一个定位
    sheet['B1']='开始'# 可用于增加表头
    for item in datas:
        sheet.append(item)
    
    # 保存
    workbook.save(url)# 覆盖原来已经存在的文件
    print('追加数据成功')
    
url='example.xlsx'
sheet_name='Sheet2'
data=read_xlsx_excel(url,sheet_name)
print(type(data[0][0]))
print(data)

# write_xlsx_excel(url,'Sheet2',data)
write_xlsx_add(url,sheet_name,data)
文章来源:https://blog.csdn.net/CodePlayMe/article/details/130114847
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。