分享

【python】解析Excel中使用xlrd库、xlwt库操作,读取Excel文件详解(一)

 暗夜精灵fdznnm 2020-12-21

上文提供了Excel文件读写操作的基本模板,本文进一步详解这两个模块的功能。

一、Book(class)
由xlrd.open_work(“example.xls”)返回

  • nsheets: sheets数
  • sheet_names: sheet名称列表
  • sheets: sheet列表
  • sheet_by_index(sheetx): 按序号提取sheet
  • sheet_by_name(sheet_name): 按名称提取sheet

二、Sheet(class)
由Book object相关方法返回

  • name:sheet名
  • nrows: 行数
  • ncols: 列数
  • cell(rowx,colx):第rows行colx列的单元格
  • cell_type(rowx,colx): 数据类型
  • cell_value(rows,colx): 数值
  • col(colx): 第colx列所有单元格组成的列表
  • col_slice(colx,start_rowx=0,end_rowx=None): 第colx列指定单元格组成的列表
  • col_types(colx,start_rowx=0,end_rowx=None): 第colx列指定单元格数值类型组成的列表
  • col_values(colx,start_rowx=0,end_rowx=None): 第colx列指定单元格数值组成的列表
  • row同样有col的各项操作,此处略去

三、Cell(class)
由Sheet object(s)相关方法返回

  • ctype: 一个int型变量,对应不同的数值类型

  • value: 单元格的值

四、xlrd模块使用详解
1、导入模块

In [1]: import xlrd

2、打开Excel文件读取数据

In [2]: data = xlrd.open_workbook('sample.xls')

In [3]: data
Out[3]: <xlrd.book.Book at 0x21df9f4a198>

3、使用技巧

# 获取一个工作表,index_number表示表的索引号,索引号从0开始,表示第一张表,1表示第二张表,依次类似。
# table = data.sheets()[index_number]          
# 1、通过索引顺序获取
In [4]: tables = data.sheets()
In [5]: tables
Out[5]: [<xlrd.sheet.Sheet at 0x21df9f5bcc0>]
In [6]: tables[0]
Out[6]: <xlrd.sheet.Sheet at 0x21df9f5bcc0>
#若果有两个表格的情况,sheets会得到两个表的地址
In [7]: data2 = xlrd.open_workbook('sample2.xls')
In [9]: data2.sheets()
Out[9]: [<xlrd.sheet.Sheet at 0x21df9f62fd0>, <xlrd.sheet.Sheet at 0x21df9f62f98>]


#table = data.sheet_by_index(index_number) 
#2、通过索引顺序获取,index_number表示表的索引号,索引号从0开始,表示第一张表,1表示第二张表,依次类似。
In [10]: data2.sheet_by_index(0)
Out[10]: <xlrd.sheet.Sheet at 0x21df9f62fd0>


3、table = data.sheet_by_name(sheet_name)
#通过名称获取,sheet_name表示工作表的名字,但是需要注意的是这个表明的字符串需要使用Unicode的字符串,如:u'xxx'
In [11]: data2.sheet_by_name('sample')
Out[11]: <xlrd.sheet.Sheet at 0x21df9f62fd0>

获取整行和整列的值(数组)

#获取行的值
#table.row_values(row_index)
In [12]: table = data2.sheet_by_name('sample')
In [13]: table.row_values(0)
Out[13]: ['netcon', 'conw.net']

#获取列的值
#table.col_values(i)
In [14]: table.col_values(0)
Out[14]: ['netcon']

获取行数和列数  

#获取行数
#nrows = table.nrows 
In [16]: table.nrows
Out[16]: 1
#获取列数
#ncols = table.ncols
In [17]: table.ncols
Out[17]: 2

循环行列表数据

In [18]: for i in range(table.nrows):
    ...:     print(table.row_values(i))
    ...:
['netcon', 'conw.net']

单元格

#根据行列的位置去单元格的数据
In [19]: cell_a1 = table.cell(0,0)

In [20]: cell_a1
Out[20]: text:'netcon'

In [21]: cell_a1.dump
Out[21]: <bound method BaseObject.dump of text:'netcon'>
#取出单元格的数值
In [22]: cell_a1.value
Out[22]: 'netcon'

使用行列索引

#通过行进行数据的获取
In [23]: cell_A1 = table.row(0)
In [24]: cell_A1
Out[24]: [text:'netcon', text:'conw.net']
In [25]: cell_A1[0]
Out[25]: text:'netcon'
In [27]: cell_A1[0].value
Out[27]: 'netcon'

#通过列进行数据的获取
In [28]: cell_A1 = table.col(0)[0].value
In [29]: cell_A1
Out[29]: 'netcon'

简单的写入

row = 0
col = 0
# 类型 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error
ctype = 1 
value = '单元格的值'
xf = 0 # 扩展的格式化
#将‘单元格的’写入到Excel中,使用put_cell写入
In [31]: table.put_cell(1,1,1,'单元格的',0)

In [32]: table.cell(1,1).value
Out[32]: '单元格的'

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多