excel操作-openpyxl
import openpyxl # 可以对xlsx进行读取、修改,无法对xls操作 # nwb=openpyxl.Workbook() # Workbook对象 # nwb.save('11-2-1.xlsx') # 保存文档,默认创建工作表sheet # wb=openpyxl.load_workbook('11-2-1.xlsx') # 读取工作簿 # print(wb) # wb.save('11-2-1_new.xlsx') from openpyxl import Workbook # 批量新建工作簿 for num in range(1,13): nwb=Workbook() wbname='1-12月/{:02}.xlsx'.format(num) nwb.save(wbname)
import openpyxl # wb=openpyxl.load_workbook('11-3-1.xlsx') # wb.create_sheet() # 在工作表的最后新建工作表 # wb.create_sheet('7月') # 在工作表的最后新建有名字的工作表 # wb.create_sheet('3月',2) # 在指定位置新建带名字的工作表,这里的2是第三个工作表的之前,新建的工作表变成第三个工作表 # wb.save('11-3-1-1.xlsx') # nwb=openpyxl.Workbook() # nwb.create_sheet() # nwb.create_sheet('工资表') # nwb.create_sheet('汇总表',0) # nwb.save('11-3-1-2.xls') wb=openpyxl.load_workbook('11-3-2.xlsx') # print(wb.worksheets) # 返回的是列表,类型加表名 # print([ws for ws in wb]) # print(wb.sheetnames) # 返回工作表的名字,为列表 print(wb.active) # 读取活动工作表,正在使用的工作表 print(wb.worksheets[1]) # 读取指定工作表的名字 print(wb['1月'])
import openpyxl # wb=openpyxl.load_workbook('11-4.xlsx') #读取工作簿 # wb.copy_worksheet(wb['1月']) # 复制工作表,这里是复制名称为1月的工作表,默认名称1月copy # nws=wb.copy_worksheet(wb['2月']);nws.title='2月份' # 复制工作表,赋值为2月份 # wb.copy_worksheet(wb['3月']).title='3月份'# 复制工作表,赋值为3月份 # wb.save('11-4-1.xlsx') # wb=openpyxl.load_workbook('11-4.xlsx') # # wb.move_sheet(wb['1月'],2) # 移动名称为1月的工作表,向右移动2个工作表的位置 # wb.move_sheet(wb['4月'],-1) # 移动名称为4月的工作表,向左移动1个工作表的位置 # wb.save('11-4-2.xlsx') wb=openpyxl.load_workbook('11-4.xlsx') wb.remove(wb['1月']) # 工作表的删除 wb.save('11-4-3.xlsx')
import openpyxl # nwb=openpyxl.Workbook() # for name in ['张三','李四','王二','麻子']: # 批量创建工作表 # nwb.create_sheet(name) # nwb.remove(nwb['Sheet']) # 因为默认有一个sheet,所以移除它 # nwb.save('案例1/11-5-1.xlsx') # wb=openpyxl.load_workbook('案例2/11-5-2.xlsx') # for year in range(2020,2024): # wsname='{}年'.format(year) # wb.copy_worksheet(wb['业绩表']).title=wsname # 复制工作表后修改名称 # wb.remove(wb['业绩表']) # 移除工作表 # wb.save('案例2/11-5-2-1.xlsx') # 同一个工作簿里面的不同工作表分别存放到不同工作簿里面 wb=openpyxl.load_workbook('案例3/11-5-3.xlsx') for name in wb.sheetnames: wb=openpyxl.load_workbook('案例3/11-5-3.xlsx') for ws in wb.worksheets: if ws.title!=name: wb.remove(ws) # 如果名称不一样则删除,最后只剩下与工作簿名称一致的工作表 wb.save('案例3/'+name+'.xlsx')
# 行列 import openpyxl wb=openpyxl.load_workbook('11-6.xlsx') # 工作簿对象 ws=wb.worksheets[0] # 索引获取第一个工作表 # print(ws['a1'],ws['a1'].value) # 获取a1单元格内存对象,Cell对象,ws['a1'].value)为A1单元格的值 # print(ws.cell(1,1),ws.cell(1,1).value) # 获取A1单元格对象,ws.cell(1,1).value单元格A1的值 ws=wb['成绩表'] # ws=wb.active # 行号从1开始 print(ws[1]) # 第一行内容对象Cell print(ws[1:2]) # 第一到第二行 print(ws['1:2'])# 第一到第二行 print(ws['1':'2'])# 第一到第二行 # 列 print(ws['a:a']) # 第一列,单列 print(ws['a:b']) # 第一第二列,多列 print(ws['a':'b'])# 第一第二列,多列 print(ws['a1:b2']) # 多行多列 print(ws['a1':'b2'])# 多行多列
import openpyxl wb=openpyxl.load_workbook('11-7.xlsx') ws=wb.active print(ws.min_row) # 使用区域的最小行 print(ws.max_row) # 使用区域的最大行 print(ws['b4'].row) # 指定单元格的行号 print(list(ws.values)) # 获取已使用的所有数据,按行返回,因为表第一、二行为空格,所以是None print(list(ws.rows)) # 按行获取单元格对象,获取的信息比上面values更多 print(list(ws.columns)) # print(list(ws.iter_rows(min_row=4,min_col=2,values_only=True))) # 获取指定范围内的值 min_row=4从第四行开始,min_col=2从第二列开始,values_only=True 获取值,false为对象 print(list(ws.iter_cols(min_row=4,min_col=2,values_only=True))) # 获取指定范围内的值 按列获取
import openpyxl wb=openpyxl.load_workbook('11-8.xlsx') # 读取工作簿 ws=wb.active # 活动表 ws['a4']='小明' # 写入A4单元格内容 ws['b4']=100 # 写入B4单元格内容 ws['c4']=89 # 写入C4单元格内容 ws.cell(5,1,'小松') # 5行1列写入小松 ws.cell(5,2,97)# 5行2列写入 ws.cell(5,3,96) # 5行3列写入,只能一个个单元格写入 # 范围内,批量写入 ws.append(['张三',88,99]) # 列表方式写入 ws.append(('李四',88,99)) # 元祖方式写入 ws.append(range(1,4)) # 数字方式写入,1到3 ws.append({'b':'小花','a':69,'c':96}) # 字典方式写入 ws.append({3:'小曾',2:100,1:100}) # 字典方式写入,顺序可以变换 # 保存 wb.save('11-8-1.xlsx')
# 99乘法表 import openpyxl wb=openpyxl.Workbook();ws=wb.active for x in range(1,10): for y in range(1,x+1): val='{}×{}={}'.format(y,x,x*y) ws.cell(x,y,val) wb.save('11-9.xlsx')
import openpyxl wb=openpyxl.load_workbook('11-10.xlsx') # ws=wb['成绩表'] ws=wb.active # 读取活动工作表 # 从第二行第二列开始读取,最大的行自行识别,max_col=ws.max_column-1最大的列为倒数第二列 score=ws.iter_rows(min_row=2,min_col=2,max_col=ws.max_column-1) for row in score: # total=sum([v.value for v in row]) # 三种方法写入总分 # ws['E'+str(row[1].row)]=total # ws.cell(row[1].row,5,total) row[-1].offset(0,1).value=total # row[-1]向右偏移一位 wb.save('11-10-1.xlsx')
# 多工作表里面的数据合并 import openpyxl wb=openpyxl.load_workbook('11-11.xlsx') nwb=openpyxl.Workbook() # 活动工作表,第一行增加内容 nwb.active.append(['月份','姓名','手机','笔记本','电脑']) for ws in wb.worksheets:# ws为列表,工作表的名称 for row in list(ws.values)[1:]: # 每个工作表的内容 nwb.active.append((ws.title,)+row) # ws.title为工作表的民初 nwb.active.title='合并结果' # 修改工作表名称 nwb.save('11-11-1.xlsx') # 保存工作簿
# 插入、删除操作学习 import openpyxl # 插入 wb=openpyxl.load_workbook('11-13-1.xlsx');ws=wb.active ws.insert_rows(2,3) # 插入行,第2行上方插入三行 ws.insert_cols(3,1) # 插入列,第3列前插入1列 #删除 ws.delete_rows(10,3) # 删除行,第10行开始往后删除3行 ws.delete_cols(5,1) # 删除列,第5列开始往后删除一列,即删除第六列 wb.save('11-13-1-1.xlsx') #移动 wb=openpyxl.load_workbook('11-13-2.xlsx');ws=wb.active ws.move_range('g8:j10',-5,3,False) # 区域范围g8:j10,向上移动5,向右移动3 ws.move_range('g15:j16',4,-5,True) # 区域范围'g15:j16,向下移动4,向左移动5 wb.save('11-13-2-1.xlsx')
# 条件筛选 import openpyxl wb=openpyxl.load_workbook('11-14-1.xlsx',data_only=True) #读取数据不读取公式,excel里面公式不读取 ws=wb.worksheets[0] for cell in ws['f'][1:]: # 读取F列,去掉表头 if cell.value<270: # 总分少于270的删除行 ws.delete_rows(cell.row) wb.save('11-14-1-1.xlsx') wb=openpyxl.load_workbook('11-14-2.xlsx',data_only=True) ws=wb['工资表'] for cell in ws['b'][2:]:# 读取B列,去掉第一、二行剩下的数据 ws.insert_rows(cell.row) # 有内容的下方插入一行 for col_num in range(1,7): tit=ws.cell(1,col_num).value # 获取第一行的信息 ws.cell(cell.row-1,col_num,tit) # 赋值到插入行 wb.save('11-14-2-1.xlsx')