Python操作 Excel
安装
读取 Excel pip install xlrd read
写入Excel pip install xlwt write
补充会用到的excel表
读取 Excel
import xlrd
myexcel = xlrd.open_workbook('files/test.xlsx')
mysheetname = myexcel.sheet_names()
print(mysheetname)
获取 sheet
一个Excel
可以有多个 sheet
sheet_names()
: 获取所有sheet的名字sheet_by_index
:根据所在的下标获取sheet 张三 李四 王五 张三排在第一位 因为下标从0开始 所以张三的下标是0sheet_by_name
:根据名字获取sheetsheets
:获取一个Excel文件中所有的sheet表格nrows
: 获取表格的行数ncols
:获取表格的列数
import xlrd
mvexcel = xlrd.open_workbook('file/a工作表.xlsx')
mysheetname1 = mvexcel.sheet_names() # 获取所有的名称
print(mysheetname1)
mysheetname2 = mvexcel.sheet_by_index(2) # 返回的是一个整体 将下标为2的表格整体命为mysheetname2 (下标起始为0)就是说现在在python中mysheetname2就代表下标为2的表格
print(mysheetname2.name) #打印这个表格的名字
mysheetname3 = mvexcel.sheet_by_name('abc') # 返回的是一个整体 将名字为'abc' 的表格整体命为mysheetname3 也就是说现在在python中mysheetname3就代表表格名字为'abc'的表格
print(mysheetname3)
mysheet = mvexcel.sheets()
for i in mysheet: # 遍历#挨个把表格从列表 (可以理解挨个为从箱子里边拿出酒)
print(i.name) # 打印该sheet的名字
sheet0 = mvexcel.sheet_by_index(0)
print("行数:%s" % sheet0.nrows) # 求总行数
print("列数:%s" % sheet0.ncols) # 求总列数
Cell 相关操作
先获取 sheet 表格 然后再获取其中的单元格
sheet.cell(row,col)
: 获取指定行 row 和 列 col的 cell对象sheet.row_slice(row,start_col,end_col)
:指定 行的 某几列的 cell对象sheet.col_slice(col,start_row,end_row)
:获取指定列的 某几行cell对象sheet.cell_value(row,col)
:获取指定行和列的值sheet.row_values(row,start_col,end_col)
:获取指定行的某几列的值sheet.col_values(col,start_row,end_row)
:获取指定列的某几行的值
import xlrd
#打开excel 文件
workbook = xlrd.open_workbook('files/成绩表.xlsx')
#获取目标sheet对象
sheet = workbook.sheet_by_index(0)
#获取cell相关内容
# cell = sheet.cell(0,0) # 下标从0开始 也就是第一行 第一列
# print(cell)
# cell1 = sheet.row_slice(1,1,3) #包含 第1 不包含 第3
# print(cell1)[number:78.0, number:99.0]
# for x in cell1:
# print(x.value)
# print(sum([x.value for x in cell1]))
# cell2 = sheet.col_slice(1,1,3) #包含 第1 不包含 第3
# print(cell2)
# for x in cell2:
# print(x.value)
# print(len(cell2))
# print(sum([x.value for x in cell2])/len(cell2))
# print(sheet.cell_value(2,2)) #第三行 第三列 单元格的值
# print(sheet.row_values(3,1,3)) #第四行的第二列到第三列的值 (因为下标从开始) # 这里括号里的值代表下标为3的行,包含下标为1的列,但不包含下标为3的列 所以是第四行的第二列到第三列的值
print(sheet.nrows) #输出为19
print(sheet.col_values(1,1,sheet.nrows))#运行结果为[78.0, 98.0, 94.0, 90.0, 95.0, 99.0, 96.0, 96.0, 93.0, 90.0, 95.0, 96.0, 92.0, 90.0, 96.0, 98.0, 92.0, 99.0] # 具体格式参考上面总结
scores = sheet.col_values(1,1,sheet.nrows)
result = sum(scores)/len(scores)
print(result)
ps:
cell.value:这个单元格中的值
cell.ctype:这个单元格的数据类型
print(sheet.cell(0,1).ctype) # 输出为:1 姓名 文本
print(sheet.cell(2,2).ctype) #输出为: 2 100 数字
Cell数据类型
xlrd.XL_CELL_TEXT
文本类型xlrd.XL_CELL_NUMBER
数值类型xlrd.XL_CELL_DATE
日期类型xlrd.XL_CELL_BOOLEAN
布尔类型xlrd.XL_CELL_BLANK
空白类型
写入Excel
- 导入xlwt模块
- 创建一个workbook对象
- 创建一个sheet对象
- 使用sheet.write(行,列,数据) 方法写入到sheet下指定的行和列中 如果想要添加新的单元格 那么就用put_cell()
- 保存成Excel文件
编辑Excel
import xlrd
import xlwt
rwb = xlrd.open_workbook('file/成绩表.xlsx')
mysheet = rwb.sheet_by_index(0)
# 添加总分单元格
mysheet.put_cell(0,4,xlrd.XL_CELL_TEXT,'总分',None)
for x in range(1,mysheet.nrows):
score = mysheet.row_values(x,1,4)
mysheet.put_cell(x,4,xlrd.XL_CELL_NUMBER,sum(score),None)
# 添加平均分单元格
mysheet.put_cell(19,0,xlrd.XL_CELL_TEXT,'平均分',None)
for y in range(1,mysheet.ncols):
score = mysheet.col_values(y,1,19)
mysheet.put_cell(19,y,xlrd.XL_CELL_NUMBER,sum(score)/len(score),None)
wwb = xlwt.Workbook(encoding='utf-8')
new_sheet = wwb.add_sheet('1班')
for row in range(mysheet.nrows):
for col in range(mysheet.ncols):
value = mysheet.cell_value(row,col)
print(value)
new_sheet.write(row,col,value)
wwb.save('file/新成绩表.xls')
创建一个新的excel
# 导入 xlwt
import xlwt
import random
# 创建对象
workbook = xlwt.Workbook(encoding='utf-8')
# 创建一个对象,新建一个excel表 表的名字叫学生成绩表
sheet = workbook.add_sheet('学生成绩表')
# 添加表头
sheet.write(0,0,'姓名')
sheet.write(0,1,'语文')
sheet.write(0,2,'数学')
sheet.write(0,3,'英语')
# 添加随机数进去
for y in range(1,11):
for x in range(4):
sheet.write(y,x,random.randint(60,100))
# 保存成Excel文件(这里是xls 不是xlsx)
workbook.save('file/scores.xls')