zoukankan      html  css  js  c++  java
  • python(读取 excel 操作 xlrd 模块)

    一、安装 xlrd 模块

    • 到 python 官网下载 http://pypi.python.org/pypi/xlrd 模块安装,前提是已经安装了 python 环境。
    • 或者在 cmd 窗口  pip install  xlrd

    二、excel 读取操作

    1.常用的函数

    •  excel 中最重要的方法就是 book 和 sheet 的操作

          1)获取 book 中一个工作表

    #coding=utf-8
    
    import xlrd
    
    data = xlrd.open_workbook("d:\test.xls")   #打开excel文件
    print (data.sheets()[0])       #通过索引顺序获取sheet对象
    print (data.sheet_by_index(0))    #通过索引顺序获取sheet对象
    print (data.sheet_by_name("Sheet1"))      #通过名称获取sheet对象
    print (data.sheet_names())     #返回book中所有工作表的名字
    
    
    #结果如下
    
    -->    <xlrd.sheet.Sheet object at 0x0000000003D969B0>
    -->    <xlrd.sheet.Sheet object at 0x0000000003D969B0>
    -->    <xlrd.sheet.Sheet object at 0x0000000003D969B0>
    -->    [u'Sheet1', u'Sheet2', u'Sheet3']
    #coding=utf-8
    
    import xlrd
    
    book = xlrd.open_workbook("C:\Users\Administrator\Desktop\aaa.xls")
    sheet = book.sheets()[0]
    #通过for循环遍历取出excel表中第一列所有的数据
    for i in range(sheet.nrows):
        print (sheet.row_values(i)[0])

      2)行的操作

    • nrows    #获取该 sheet 中的有效行数  
    • row(row_index)    #返回由该行中所有的单元格对象组成的列表
    • row_slice(row_index, start_colx=0, end_colx=None)    #默认返回由该行中所有的单元格对象组成的列表(结果只能返回 end_colx 前值)  
    • row_values(row_index, start_colx=0, end_colx=None)     #默认返回由该行中所有单元格的数据组成的列表(结果只能返回 end_colx 前值)
    • row_len(index)   #返回该行的有效单元格长度
    #coding=utf-8
    
    import xlrd
    
    data = xlrd.open_workbook("d:\test.xls")
    sheet = data.sheets()[0]
    print (sheet.nrows)       #获取该sheet中的有效行数
    print (sheet.row(0))      #返回由该行中所有的单元格对象组成的列表
    print (sheet.row_slice(0))    #默认返回由该行中所有的单元格对象组成的列表
    print (sheet.row_values(0,1))   #默认返回由该行中所有单元格的数据组成的列表
    print (sheet.row_len(0))      #索引值为0的行中有效单元格有几个
    
    
    #结果如下
    
    -->    10
    -->    [text:u'user1', text:u'pwd1']
    -->    [text:u'user1', text:u'pwd1']
    -->    [u'pwd1']
    -->    2

      

           3)列(colnum)的操作

    • ncols   #获取列表的有效列数
    • col(col_index, start_rowx=0, end_rowx=None)  #默认返回由该列中所有的单元格对象组成的列表(结果只能返回 end_rowx 前值)  
    • col_slice(col_index, start_rowx=0, end_rowx=None)  #默认返回由该列中所有的单元格对象组成的列表(结果只能返回 end_rowx 前值)  
    • col_values(col_index, start_rowx=0, end_rowx=None)   #默认返回由该列中所有单元格的数据组成的列表(结果只能返回 end_rowx 前值)  
    #coding=utf-8
    
    import xlrd
    
    data = xlrd.open_workbook("d:\test.xls")
    sheet = data.sheets()[0]
    print (sheet.ncols)       #获取列表的有效列数
    print (sheet.col(0,0,2))      #返回第一行和第二行的单元格对象组成的列表
    print (sheet.col_slice(0,0,2))    #返回第一行和第二行的单元格对象组成的列表
    print (sheet.col_values(0,0,2))   #返回第一行和第二行的单元格数据组成的列表
    
    
    #结果如下
    
    -->    2
    -->    [text:u'user1', text:u'user2']
    -->    [text:u'user1', text:u'user2']
    -->    [u'user1', u'user2']

          

      4)单元格的操作  

    • cell(row_index,col_index)   #返回单元格对象
    • cell_value(row_index,col_index)   #返回单元格中的数据
    #coding=utf-8
    
    import xlrd
    
    data = xlrd.open_workbook("d:\test.xls")
    sheet = data.sheets()[0]
    print (sheet.cell(0,0))       #返回第一行第一列单元格对象
    print (sheet.cell_value(0,0))     #返回第一行第一列单元格中的数据
    
    
    #结果如下
    
    -->    text:u'user1'
    -->    user1

      

      5)读取 excel 方法封装

    #coding=utf-8
    
    import xlrd
    
    class ReadExcel():
    
        def __init__(self,file,sheet_i):
            self.book = xlrd.open_workbook(file)
            self.sheet = self.book.sheet_by_index(sheet_i)
    
        def getValue(self,row_i,col_i):
            """
            获取excel单元格数据 
            """
            return self.sheet.cell_value(row_i,col_i)
    
        def getRows(self):
            """
            获取有效行数
            """
            return self.sheet.nrows
    
        def getCols(self):
            """
            获取有效列数
            """
            return self.sheet.ncols

    2.单元格是表格中行与列的交叉部分,它是组成表格的最小单位,可拆分或者合并。单个数据的输入和修改都是在单元格中进行的如:

    注意:注意作用域问题,之前获取的 sheet 之后,都在获取到这个 sheet 值后,在进行,行和列以及单元格的操作。

    问题现象:

    • 使用 open() 函数、xlrd.open_workbook() 函数打开文件,文件名若包含中文,会报错找不到这个文件或目录。
    • 获取 sheet 时若包含中文,也会报错。
    #打开文件
    file = open(filename,'rb')
    
    #打开excel文件
    workbook = xlrd.open_workbook(filename)
    
    #获取sheet
    sheet = workbook.sheet_by_name(sheetname)

     解决方案

    • 对参数进行转码即可。如:
    filename = filename.decode('utf-8')
    •  也试过 unicode 函数,不过,在 ride 中运行时出现了报错,所以不赞成使用
    filename = unicode(filename,'utf-8')
  • 相关阅读:
    JAVA_SE基础——59.权限访问修饰符
    JAVA_SE基础——58.如何用jar命令对java工程进行打包
    JAVA_SE基础——57.有了包之后类与类之间的访问使用import语句
    JAVA_SE基础——56.包的创建
    JAVA_SE基础——55.自定义异常类
    JAVA_SE基础——54.异常
    JAVA_SE基础——53.什么是异常?
    Spring整合Mybatis
    Mybatis的ResultMap结果集映射、日志、分页
    Java中的值传递机制
  • 原文地址:https://www.cnblogs.com/ZhengYing0813/p/11868624.html
Copyright © 2011-2022 走看看