自己的一点点愚见
#excel文件操作
# 安装两个库 xlrd用于读取 xlwt用于写入
#1.打开excel文件 获取sheet
import xlrd
workbook=xlrd.open_workbook(".xlsx")
#1.获取sheet名字
workbook.sheet_names() #这里会报xlrd.biffh.XLRDError: Excel xlsx file; not supported 把xlrd版本降为1.2.0版本即可
#2.根据索引获取指定的sheet对象
workbook.sheet_by_index(0) #这样的得到的是<xlrd.sheet.Sheet object at 0x000002B833C4E908>
#如果想得到名字 在后面加一个 .name
sheet=workbook.sheet_by_index(0).name
#3.根据名称获取指定的sheet对象
workbook.sheet_by_name('') #如果要得到汉字 要加name
#4.获取所有的sheet对象
sheets=workbook.sheets() #不可 在这里最后加 .name
for i in sheets:
print(i) #可以在 i 后面加 .name 这样可以得到的是汉字
#5.获取sheet中的行数和列数
sheet=workbook.sheet_by_index(0) #先指定一个sheet
print({"rows":sheet.nrows,"cols":sheet.ncols})
这一部分主要是 打开文件 和 选择sheet
import xlrd
workbook=xlrd.open_workbook('.xlsx')
sheet = workbook.sheet_by_index(0) #先选这一个sheet
cell = sheet.cell(1,1) #获取指定位置的cell 1,1代表第一行第一列的cell
print(cell.value) # .value 类似于 .name
cells = sheet.row_slice(1,1,4) # 1 代表第一行 1,4 代表从1开始到4结束 这里的数字是代表下标
for cell in cells:
print(cell.value)
cells = sheet.col_slice(0,1,sheet.nrows) #0 代表第一列 1,sheet.nrows 即从一开始到sheet.nrows(sheet。nrows代表最后一个)
for cell in cells:
print(cell.value)
#对象 输出 出来 会加上对象的类型 as number:78.0 text:'姓名'
#第一数字代表行还是列的看前面的函数 如果加valuues 得到的是值 而不是对象
cell_value = sheet.cell_value(0,1)
print(cell_value)
cell_values = sheet.col_values(1,1,sheet.nrows)
print(cell_values)
cell_values = sheet.row_values(1,1,sheet.ncols)
print(cell_values)
#cell中数据的类型
# 0 -----> XL_CELL_EMPTY 1 -----> XL_CELL_TEXT
# 2 -----> XL_CELL_NUMBER 3 -----> XL_CELL_DATE
# 4 -----> XL_CELL_BOOLEAN
sheet = workbook.sheet_by_index(0)
cell = sheet.cell(0,0)
print(cell.ctype)
print(xlrd.XL_CELL_TEXT)
cell = sheet.cell(1,1)
print(cell.ctype)
print(xlrd.XL_CELL_NUMBER)
cell = sheet.cell(18,0)
print(cell.ctype)
print(xlrd.XL_CELL_DATE)
cell = sheet.cell(19,0)
print(cell.ctype)
print(xlrd.XL_CELL_BOOLEAN)
cell = sheet.cell(1,1)
print(cell.ctype)
print(xlrd.XL_CELL_EMPTY)
这一部分主要对 sheet.row_values sheet.col_values 了解
import xlrd
import xlwt
workbook=xlrd.open_workbook('.xlsx')
rsheet=workbook.sheet_by_index(0)
nrows=rsheet.nrows
ncols=rsheet.ncols
rsheet.put_cell(0,ncols,xlrd.XL_CELL_TEXT,'总分',None)
rsheet.put_cell(nrows,0,xlrd.XL_CELL_TEXT,'平均分',None)
for i in range(1,ncols):
grades=rsheet.row_values(i,1,ncols)
#print(grades)
total=sum(grades)
#print(total)
rsheet.put_cell(i,ncols,xlrd.XL_CELL_NUMBER,total,None)
for j in range(1,nrows+1):
grades=rsheet.col_values(j,1,nrows)
average=sum(grades)/len(grades)
rsheet.put_cell(nrows,j,xlrd.XL_CELL_NUMBER,average,None)
wwt=xlwt.Workbook()
wsheet=wwt.add_sheet('zz')
for row in range(0,nrows+1):
for col in range(0,ncols+1):
wsheet.write(row,col,rsheet.cell_value(row,col))
wwt.save('.xlsx')
这一部分是编辑excel
- 先读取原来的Excel文件。
- 然后在读取的sheet上面进行cell的修改,可以使用sheet.put_cell(row,col,ctype,value,None)方法实现。
- 再重新创建一个新的excel文件,然后把之前读取到的数据写入到新的excel文件中。