zoukankan      html  css  js  c++  java
  • 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')

  • 相关阅读:
    卷积层中的特征冗余
    【跨模态智能分析】人物关系检测、指代表达、指代分割
    【第1周作业】“乘风破浪的程序员小哥哥小姐姐” 成团时刻
    2020年秋季《软件工程》开课啦
    初入科研领域,如何正确做科研
    【WACV2020】ULSAM: Ultra-Lightweight Subspace Attention Module
    【ECCV2020】 Context-Gated Convolution
    【ECCV2020】WeightNet: Revisiting the Design Space of Weight Networks
    【ECCV2020】Image Inpainting via a Mutual Encoder-Decoder with Feature Equalizations
    【新生学习】课程学习记录
  • 原文地址:https://www.cnblogs.com/cheng662540/p/15477082.html
Copyright © 2011-2022 走看看