• Python学习笔记(十六)—Python操作Excel


    Python中对Excel文件的操作包括:读、写、修改。如果要对其进行如上的操作需要导入Python的第三方模块:xlrd、xlwd、xlutils,其分别对应Python的读、写、修改的操作

    一、安装Python的第三方模块

      之前的文章中已经写明安装模块的方法有三种这里就不在进行阐述。如果需要请参考链接:https://www.cnblogs.com/beginner-boy/p/7247688.html

    二、操作Excel的基本步骤

    1、导入响对应的模块

    2、通过xlwt.Workbook(),创建一个Excel文件

    3、创建一个sheet对象,一个sheet对象对应Excel文件中的一张表格

    4、向文件中写入/读取内容

    5、通过save()保存文件

    三、对Excel的写、读、修改操作

    1、对Excel的写操作

    import xlwt #导入操作Excel的写模块
    # 基本的写入操作
    book = xlwt.Workbook() #创建一个Excel表格
    sheet = book.add_sheet('test_sheet1') #给Excel表中添加一个sheet页
    sheet.write(0,0,'id')  #向sheet表中写入数据,第一个参数代表的行数,第二个参数代表的列数,第三个参数代表写入的内容
    sheet.write(0,1,'name')
    sheet.write(1,0,1)
    sheet.write(1,1,'xiaohei')
    book.save('test.xls') #报存文件,结尾只能用xls,因为如果用.xlsx的话用微软的软件打不开,WPS才能打开
    #如果存在很多数据的时候,用基本写入是不现实的,这个时候我们可以使用循环进行操作
    
    #循环方式一:
    stus = [[1,'test2','123456'],[2,'test2','123456'],[3,'test3','123456']]
    book = xlwt.Workbook() #创建一个Excel表格
    sheet = book.add_sheet('test_sheet1') #给Excel表中添加一个sheet页
    line = 0 #控制写入的行数
    for stu in stus:
        col = 0  #控制写入的列数
        for s in stu:
            sheet.write(line,col,s)
            col += 1
        line += 1
    book.save('stu.xls')
    
    # 循环方式二:
    # enumerate 方法自动计算循环的下标,循环使用的时候,先取下标在取值
    stus = [[1,'test2','123456'],[2,'test2','123456'],[3,'test3','123456']]
    book = xlwt.Workbook() #创建一个Excel表格
    sheet = book.add_sheet('test_sheet1') #给Excel表中添加一个sheet页
    for line,stu in enumerate(stus):
        for col,s in enumerate(stu):
            sheet.write(line,col,s)
    book.save('stu.xls')

    说明:cell_overwrite_ok=True

    在添加sheet页的时候,如果不指定cell_overwrite_ok则默认值为false;意思就是如果对一个sheet表中同一位置进行多次编辑这个时候执行Python代码会出现保存;如果添加了cell_overwrite_ok=True,那么对同一位置的值进行写入的时候则会覆盖写入不会报错。

    book = xlwt.Workbook() #创建一个Excel表格
    sheet = book.add_sheet('test_sheet1',cell_overwrite_ok=True) #给Excel表中添加一个sheet页
    sheet.write(0,0,'id')  #向sheet表中写入数据,第一个参数代表的行数,第二个参数代表的列数,第三个参数代表写入的内容
    sheet.write(0,1,'name')
    sheet.write(1,0,1)
    sheet.write(1,1,'哈哈')
    sheet.write(1,1,'测试哈哈')
    book.save('test.xls')

    2、对Excel的读操作

    import xlrd
    book = xlrd.open_workbook('stu.xls')  #打开Excel文件,可以制定绝对路径的文件
    # sheet = book.sheet_by_name('Sheet1')  #通过sheet表的名称来读取要操作的表
    sheet = book.sheet_by_index(1)  #通过Excel表中sheet也得下标确定要读取的表,下标从左往右依次为:0,1,2……
    rows = sheet.nrows  #获取表中所有的行数
    cols = sheet.ncols  #获取表中所有的列数
    print('表中的总行数是:%s'%(rows))
    print('表中的总列数是:%s'%(cols))
    print(sheet.cell(0,0).value) #获取指定单元格的内容
    print(sheet.cell_value(0,0)) #获取指定单元格的内容
    
    print(sheet.cell(0,1).value) #获取指定单元格的内容
    print(sheet.cell_value(0,1)) #获取指定单元格的内容
    
    print(sheet.row_values(0)) #获取整行的内容,以列表格式显示
    print(sheet.col_values(0)) #获取整列的内容,以列表格式显示
    
    运行结果:
    表中的总行数是:4
    表中的总列数是:2
    a
    a
    e
    e
    ['a', 'e']
    ['a', 'b', 'c', 'd']
    
    #循环打印每一行的数据
    for i in range(rows):
        print(sheet.row_values(i))
    运行结果:
    ['a', 'e']
    ['b', 'f']
    ['c', 'g']
    ['d', 'h']
    
    #循环打印每一列的值:
    for i in range(cols):
        print(sheet.col_values(i))
    运行结果:
    ['a', 'b', 'c', 'd']
    ['e', 'f', 'g', 'h']
    
    #循环读取每一个元素的值
    for i in range(rows):
        for j in range(cols):
            print('第%s行第%s列的值是:%s'%(i,j,sheet.cell_value(i,j)))
    运行结果:
    第0行第0列的值是:a
    第0行第1列的值是:e
    第1行第0列的值是:b
    第1行第1列的值是:f
    第2行第0列的值是:c
    第2行第1列的值是:g
    第3行第0列的值是:d
    第3行第1列的值是:h
    
    
    #其它方法:
    import xlrd
    book = xlrd.open_workbook('stu.xls')  #打开Excel文件,可以制定绝对路径的文件
    sheet = book.sheet_names()[1] #该函数是用来获取sheet页的表名称的,这个代表获取Excel表中下标是1的表名称值
    print(sheet)
    sheet = book.sheet_loaded('Sheet1')  #判断表是否存在,存在返回true 不存在报错
    print(sheet)
    
    运行结果:
    Sheet1
    True

    3、对Excel文件的修改

    对Excel修改的时候使用xlutils模块,该模块需要和xlrd模块一起使用

    修改的方法就是:1、先用用xlrd打开一个Excel;2、用xlutils模块中的copy功能,复制一个Excel ;3、对赋值的Excel进行修改;

    from xlutils import copy
    book = xlrd.open_workbook('stu.xls')
    new_book = copy.copy(book)
    sheet = new_book.get_sheet(1) #通过下标获取要操作的sheet页
    sheet.write(0,1,'wyh')
    sheet.write(1,2,'wyh1')
    new_book.save('stu.xls')
  • 相关阅读:
    <<SQL Server 2005 高级程序设计>> 学习笔记(4)
    ASP.NET发布网站的二个小问题总结
    Android AlertDialog 实例
    SQL2005 导入其它服务器数据
    Android sysout.exit(0) 和finish()区别
    <<SQL Server 2005 高级程序设计>> 学习笔记(3)
    ASP.NET上传多个文件
    <<SQL Server 2005 高级程序设计>> 学习笔记(1)
    SurfaceView 间取得焦点
    图像处理类
  • 原文地址:https://www.cnblogs.com/beginner-boy/p/12565400.html
Copyright © 2020-2023  润新知