excel有xls和xlsx两种格式,他们的区别在于
python中对xls格式文件相关的包有三个:xlrd、xlwt和xlutils
# 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
运行结果
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)
可以通过一下方法,对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('追加数据成功')
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)