美文网首页
用python处理Excel表

用python处理Excel表

作者: 刘年 | 来源:发表于2020-03-17 08:02 被阅读0次

    今天开始学习用python处理excel表

    1、初识

    首先认识一下在excel表的基本类型

    • 1 工作薄workbook即整个excel文件
    • 2 表单worksheet即excel文件中各个sheet表单
    • 3 行(row)列(column)单元格(cell),这是基本元素
      行号是1,2,3,列号是ABC
      不管是python还是VB,处理excel表时一定要弄清楚处理的对象是什么,是怎么样的属性和顺序,例如行是从上到下遍历,列是从左到右遍历

    2、创建表单

    对于创建一个新的Excel文档,直接进行Workbook类的调用即可,对于一个已经存在的Excel文档,可以使用openpyxl模块的load_workbook函数进行读取

    import openpyxl
    wb =openpyxl.load_workbook('ss.xlsx',)
    print(wb.sheetnames)
    for sheet in wb:
        #遍历表单
        print(sheet.title)
    #增加sheet表
    add_sheet = wb.create_sheet("Mysheet")
    print(wb.sheetnames)
    

    运行结果

    ['Sheet1']
    Sheet1
    ['Sheet1', 'Mysheet']
    

    可以给wb.create_sheet()加索引,

    add_sheet = wb.create_sheet("Mysheet",0)
    

    得到

    ['Sheet1']
    Sheet1
    ['Mysheet', 'Sheet1']
    

    新建成表的位置就变化了
    注意,这样load_workbook没有改变原表格的内容,只是读取了表格内容放在内存,所有原表格没有变化

    但是如果我们将wb另存,则可以看到变化

    import openpyxl
    wb =openpyxl.load_workbook('ss.xlsx',)
    print(wb.sheetnames)
    for sheet in wb:
        #遍历表单
        print(sheet.title)
    #增加sheet表
    # add_sheet = wb.create_sheet("Mysheet",0)
    for i in range(4):
        sheet = wb .create_sheet(str(i))
    #另存文件,则新文件与源文件不一样
    wb.save('s1.xlsx')
    print(wb.sheetnames)
    

    选择表单

    #选择表单
    # sheet3 =wb.get_sheet_by_name('sheet3')
    # sheet5 = wb['']
    

    3、处理单元格

    print(ws['A1'].value)
    c = ws['B1']
    #c.row,c.column,c.value分别表示行数、列数、值
    print('Row{},Colum{} is {}'.format(c.row,c.column,c.value))
    #c.coordinate坐标,可以直接得到行列表示的值
    print('cell {} is {}'.format(c.coordinate,c.value))
    print(ws.cell(row =1,column=2).value)
    

    借此机会把格式化字符串巩固一下

    各种取单元格、区域和遍历的方式

    #取行和列
    #取第c列
    colc =ws['c']
    #注意,索引是从0开始,行标是从一开始,所以ws['c'][0]=ws['c1']
    print(colc[2].value)
    #取序列值
    #访问B到C所有单元格
    col_range =ws['B:C']
    #访问2到6行
    row_range = ws[2:6]
    #遍历
    #循环先从列开始B——C
    for col in col_range:
        #然后逐列从上往下取单元格
        for cell in col:
            print(cell.value)
    #先行后单元格
    for row in row_range:
        for cell in row:
            print(cell.value)
    

    对区域进行处理

    #取区域
    #注意用iter_rows()取范围的方式
    for row in ws.iter_rows(min_row=1,max_row=2,max_col=2):
        for cell in row:
            print(cell)
    cell_range = ws['A1:C3']
    #区域内的遍历,先行后列
    for rowofcellobjiect in cell_range:
        for cellobj in rowofcellobjiect:
            print(cellobj)
    #最大行最大列
    print('{}*{}'.format(ws.max_row,ws.max_column))
    
    #列的表示不仅是A——Z,超过Z之后比较麻烦,所以改为数字
    from openpyxl.utils import get_column_letter,column_index_from_string
    #数字变列
    print(get_column_letter(2),get_column_letter(900))
    #字母变数字
    print(column_index_from_string("AAH"))
    

    4、写数据

    import openpyxl
    from openpyxl.utils import get_column_letter
    wb = openpyxl.Workbook()
    #当前活动页
    sheet = wb.active
    print(sheet.title)
    sheet.title = 'happy2020'
    print(wb.get_sheet_names())
    #新建表单
    wb.create_sheet(index = 0,title='firstsheet')
    wb.create_sheet(index = 1,title='secsheet')
    print(wb.get_sheet_names())
    #移除表单
    wb.remove_sheet(wb.get_sheet_by_name('secsheet'))
    print(wb.get_sheet_names())
    #保存
    wb.save('sss.xlsx')
    
    #写入单元格
    #单元格有点类似字典变量,根据key索引
    sheet['A1'] ='hello,world'
    print(sheet['A1'].value)
    
    ws1 = wb.create_sheet('rangename')
    for row in range(1,40):
        ws1.append(range(17))
    
    ws2 = wb.create_sheet('List')
    rows =[
        ['number','batch1','batch2'],
        [2,4,6],
        [3,40,5],
        [4,50,33],
    ]
    for row in rows:
        ws2.append(row)
    ws3 = wb.create_sheet(title='bata')
    for row in range(5,30):
        for col in range(15,54):
            ws3.cell(column=col,row= row,value=get_column_letter(col))
    wb.save('sss.xlsx')
    

    5、根据条件修改单元格数据

    原表

    现在要重新给不同的名字赋值
    'zs':15,
    'ls':20,
    'ww':22,

    import openpyxl
    changemessage = {
        'zs':15,
        'ls':20,
        'ww':22,
    }
    wb = openpyxl.load_workbook('name.xlsx')
    ws =wb.active
    for rowNum in range(2,ws.max_row+1):
        name = ws.cell(row= rowNum,column=1).value
        if name in changemessage:
            ws.cell(row = rowNum,column=2).value = changemessage[name]
    #一定要另存,不要覆盖原文件
    wb.save('name2.xlsx')
    

    相关文章

      网友评论

          本文标题:用python处理Excel表

          本文链接:https://www.haomeiwen.com/subject/upooehtx.html